1
我有一個文件,我想忽略它的一部分。在Lexer中,我使用門控語義謂詞來避免爲文件的無趣部分創建令牌。我的規則類似於以下內容。Antlr多餘的謂詞需要?
A
: {!ignore}?=> 'A'
;
START_IGNORE
: 'foo' {ignore = true; skip();}
;
END_IGNORE
: 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
但是除非我改變的開始和結束也使用語義謂詞(如下),這是行不通的..
A
: {!ignore}?=> 'A'
;
START_IGNORE
: {true}?=> 'foo' {ignore = true; skip();}
;
END_IGNORE
: {true}?=> 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
爲什麼我添加的謂詞?
編輯:我使用ANTLR-3.4
我使用Eclipse插件編譯等,但不是插件提供的解釋器。從命令行編譯我得到了和以前相同的結果,所以在我的代碼中有一些奇怪的東西。通常我會接受我得到的解決方案,但還有其他一些問題。我會盡力找出造成這種行爲的原因。 – 2012-07-09 20:40:21
@HeinrichOdy,如果您使用的是v3.4,請嘗試恢復到v3.3:根據我的經驗,v3.3的問題較少。 – 2012-07-09 20:43:55
請看我是否可以輕鬆更改版本,如果是的話,會嘗試3.3,謝謝。 – 2012-07-09 20:49:23