2016-11-01 24 views
0

這裏是我的ANTLR4語法片段:ANTLR的詞法規則不包括令牌

詞法規則:

AND     : ('a'|'A') ('n'|'N') ('d'|'D'); 
OR     : ('o'|'O') ('r'|'R') ; 
NOT     : ('n'|'N') ('o'|'O') ('t'|'T') ; 

TERM    : ('a'..'z'|'A'..'Z'|'0'..'9'|[1-9])+ ; 

的語法規則:

negation: NOT; 
logical: AND|OR; 
term:  TERM; 

search 
    : negation? term (logical negation? term)* ; 
    ; 

基本上我想獲得它解析「你和我」字符串,使TERM標記匹配「你」,「我」,我想要「和」被AND規則識別,而不是 TERM規則。

現在我得到了:line 1:4 missing TERM at 'and'錯誤。

我知道我的輸入符合AND和TERM詞法分析規則,但我希望能夠指定TERM是,除了什麼符合AND規則。

+0

當你在antlr中有這個非常典型的關鍵字/標識符通用前綴歧義時,你應該考慮使用'文字'特徵。 (見http://www.antlr2.org/doc/options.html#literal) – BadZen

+0

看起來您需要添加一個空白規則。 – GRosenberg

回答

0

嘗試添加以下到您的詞法規則:

WS : [ \r\n\t\u000C]+ -> skip ;

基本上,這是匹配任何whitspace,製表符,換行符,TR令牌與skip你告訴ANTLR跳過它。