2012-09-24 77 views
2

我一直在研究語法很長一段時間,但現在當我在大代碼基礎上嘗試時,我遇到了這個煩人的問題。當我試圖解析一個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 。 關於如何解決這個問題的任何想法?

回答

1

你能創建一個變量名稱詞法分析規則嗎?

public VARIABLENAME : '@' ID 

這樣關鍵字仍然可以工作,但不會干擾變量名稱。

variable規則將被修改爲:

public variable : VARIABLENAME '=' STRING; 
0

嘗試使用沒有「INDEX」規則的語法,並在AST遍歷的C#代碼中手動檢查此規則。

+0

如果我排除指數詞法規則它的工作原理,但在我更大的語法我有那些幾百。那麼我需要刪除我的語法中的所有單詞,然後檢查它們......對我來說,將所有內容解析爲ID並在之後處理它們是沒有意義的。這是它應該工作的方式嗎? – JakobHagg

相關問題