在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