我在antlr中对AST进行了以下规则和规则重写:
param_name
: name subscript? initial_value? (',' name subscript? initial_value?)* ';' -> ^(name subscript? initial_value?)*
;
问题在于我发现我不允许在规则重写中将*放在我所放置的地方。任何人都可以提出不同的解决方案吗?我希望从我重写的规则中,你能理解我想要实现的目标。
答案 0 :(得分:1)
尝试这样的事情:
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?)
;
...