AST规则重写



我在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?)
 ;
...

相关内容

  • 没有找到相关文章

最新更新