AST规则重写

时间:2013-11-20 01:35:24

标签: antlr antlr3 antlr4 abstract-syntax-tree antlrworks

我在antlr中对AST进行了以下规则和规则重写:


param_name
    :   name subscript? initial_value? (',' name subscript? initial_value?)*  ';' -> ^(name subscript? initial_value?)*
    ;   

问题在于我发现我不允许在规则重写中将*放在我所放置的地方。任何人都可以提出不同的解决方案吗?我希望从我重写的规则中,你能理解我想要实现的目标。

1 个答案:

答案 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?)
 ;

...