2010-08-09 17 views
1

我有以下ANTLR:MismatchedTokenException異常相似的文字

rule : A B; 

A : 'a_e' | 'a'; 
B : '_b'; 

輸入:

a_b //dont work 
a_e_b //works 

爲什麼有麻煩匹配該詞法分析器?當ANTLR與'a_b'中的'a_'相匹配時,它不應該回溯或使用前瞻或某物看到它不能匹配標記A,然後決定將標記A匹配爲'a',然後繼續將標記B匹配爲'_b'?

我覺得我很想念關於antlr的一些非常基本的東西。我試圖在ANTLR文檔和谷歌上閱讀它。但是我沒有使用詞法分析器和解析器的經驗。

非常感謝您的幫助。

+0

您是否需要將規則作爲詞法規則?它可以使用解析器規則解決(略微改變語法)? – WayneH 2010-08-24 22:45:25

回答

1

您需要使用句法謂詞來區分'a','_','e'和'b'。

下面的工作:

grammar T; 

rule : A B; 

B : '_b'; 
A :  ('a_e')=>'a_e' 
    | 'a' ; 

這解析 'a_e_b' 和 'A_B' 如您所願。

推薦檢查確定性ANTLR參考文獻的第13章。