是否可以在ANTLR4的生产中命名单个令牌?

时间:2013-10-30 20:37:17

标签: parsing antlr antlr4

假设我想用ANTLR4解析单个点:

grammar Point;
point : '(' INT ',' INT ')';
INT : [0-9]+;

如果我能将第一个INT命名为x而第二个INT命名为y,那就太好了。有没有办法命名它们,所以我可以在代码中更优雅地访问它们?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用标签:

point : '(' x=INT ',' y=INT ')';

这对令牌的效果相当不错,但对于解析器规则,如果在解析过程中抛出异常,则可能无法设置标签。换句话说,请避免以下情况:

point
  : '('
    x=INT // this is fine
    ','
    y=id  // avoid: y might not be set if an exception occurs while parsing `id`
    ')';