在ANTLR4中,Java中生成的词法分析器包含每个标记的公共字段,其中字段的类型是简单的'int'。是否有原因为什么ANTLR4不使用枚举,或者是否有使用枚举的选项?有没有办法让ANTLR4为生成的令牌使用枚举?
这是一个简单的例子把我的头
x.g4顶部
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]
它已经经历过了讨论:http://www.antlr3.org/pipermail/antlr-interest/2008- May/028432.html – 2015-04-02 20:00:52
根据这个讨论,对于生成的词法分析器类来说,它可能是最简单的,它包含将令牌的整数值映射到字符串名称的数组,例如已经为modeNames和ruleNames完成的数组。有一个tokenNames数组,但它包含一个看似随机的字符集。也许这只是一个错误。 – jonr 2015-04-02 23:35:10