在ANTLR4中,用Java生成的词法分析器为每个令牌包含一个公共字段,其中字段的类型为简单的“ int”。是否有理由为什么ANTLR4不使用枚举,还是有选择使其使用枚举?

这是一个简单的例子

x4

A: 'a';
B: 'b';


XLexer.java

public class XLexer extends Lexer{
   public static final int A = 1, B = 2;
}


我希望XLexer包含

public class XLexer extends Lexer{
  public static enum Token{
    A(1), B(2)
  }
}


当转储令牌时,这对于调试目的很有用。现在,不打印令牌名称,而是仅提供整数表示。

[@-1,0:0='a',<1>,1:0]


可读性更高的版本将使用而不是

[@-1,0:0='a',<A>,1:0]

最佳答案

要将int令牌类型转换为其符号值,只需使用

String tokenName = YourLexer.VOCABULARY.getSymbolicName(type);

10-06 09:28