我在antlr:中对AST有以下规则和规则重写
param_name
: name subscript? initial_value? (',' name subscript? initial_value?)* ';' -> ^(name subscript? initial_value?)*
;
问题是,我发现我不允许在规则重写的地方放一个*。有人能提出不同的解决方案吗?我希望从我改写的规则中,你能理解我想要实现的目标。
试试这样的东西:
grammar T;
...
tokens {
PARAMS;
}
...
param_names
: param_name (',' param_name)* ';' -> ^(PARAMS param_name+)
;
param_name
: name subscript? initial_value? -> ^(name subscript? initial_value?)
;
...
如果name
也是一个AST(而不是一个单独的令牌),您可能想尝试这样的东西:
grammar T;
...
tokens {
PARAMS;
PARAM;
}
...
param_names
: param_name (',' param_name)* ';' -> ^(PARAMS param_name+)
;
param_name
: name subscript? initial_value? -> ^(PARAM name subscript? initial_value?)
;
...