默认情况下,该token.getType()
方法返回一个int
,并且对于基于代码的代码非常无用,无需加载和解析*.tokens
生成的文件。
ANTLR 用户通常如何一致地使用令牌类型?我所说的一致的意思是,如果你改变语法,记号很可能会改变。
您通常会创建一个Utility
加载*.tokens
文件并解析它的类吗?
我的示例Search.tokens
文件:
LOCATION=8
TIME=5
AGE=3
WS=1
COMPARATIVE=9
GENDER=4
PHRASE=2
示例令牌流:
(token.getType(), token.getText())
9 [MegaBlocks vs Legos], -1 [<EOF>]
目前我正在做类似的事情:
public class TokenMapper {
private HashMap<Integer, String> tokens;
public TokenMapper(String file) {
tokens = new HashMap<Integer, String>();
parse(file);
}
private void parse(String file) {
// trivial code that maps the Integer typeId to the String name
}
public Integer type(String type) {
for(Map.Entry<Integer, String> entry : tokens.entrySet()) {
if(entry.getValue().equals(type)) {
return entry.getKey();
}
}
return null;
}
public String type(Integer type) {
return tokens.get(type);
}
}
然后我总是可以通过诸如LOCATION
or之类的名称来引用我的标记,GENDER
而不必担心Integer
会发生变化的值。