我一直在研究語法很長一段時間,但現在當我在大代碼基礎上嘗試時,我遇到了這個煩人的問題。當我試圖解析一個ID時,例如「INDEX」,並且我有另一個查找'INDEX'的規則時,解析器失敗。我已經創建了一個例子文法說明問題:當我試圖解析「@some = 'some'
」ANTLR ID與詞法分析器規則混合
public variable : '@' ID '=' STRING;
index : INDEX;
WS : (' '|'\r'|'\t'|'\u000C'|'\n') {Skip();};
INDEX : 'INDEX';
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
STRING : '\'' (ESC_SEQ | ~('\\'|'\''))* '\'';
所以它工作正常,但「@index = 'some'
」給我{<mismatched token: [@1,1:5='index',<8>,1:1], [email protected]='some'>}
輸出是在C#中的AST 。 關於如何解決這個問題的任何想法?
如果我排除指數詞法規則它的工作原理,但在我更大的語法我有那些幾百。那麼我需要刪除我的語法中的所有單詞,然後檢查它們......對我來說,將所有內容解析爲ID並在之後處理它們是沒有意義的。這是它應該工作的方式嗎? – JakobHagg