2
默認情況下,token.getType()
方法返回int
,並且基於代碼很沒用,無需加載和解析生成的*.tokens
文件。Antlr4創建更有意義/一致的類型名稱
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
或GENDER
,不要h大家擔心趨勢會改變的Integer
值。
哦哇,我沒有注意到! –