在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);