ANTLR 4.5給了我一個「不匹配的輸入」字符串[]'期望'字符串'「,但我不明白爲什麼'[]'被包含在令牌。由於托架包含在令牌中,ANTLR4給出了不匹配的輸入
我已經剝離了語法下降到最低限度,以顯示該問題:
grammar Test;
@header
{
package parser;
}
mainClass : 'class' ID '{' 'void' 'main' '(' 'String' '[' ']' ID ')' '}' ;
ID : [a-zA-Z] [a-zA-z0-9]* ;
WS : [ \t\f\r\n]+ -> channel(HIDDEN);
的輸入是:
class A
{
void main(String[] args)
}
如果我使用「字符串[]」則輸入是成功解析。
如果我從分析樹中打印出令牌,那麼它們都看起來像我所期望的,除了'String []'被顯示爲一個ID令牌而不是3個單獨的令牌。
我試着明確地定義'String','['和']'標記,但結果是一樣的。
我只是不能解決什麼是錯的。
唯一讓我想到的是,你的詞法分析規則是互相爭鬥的。嘗試將它們轉換爲命名規則,而不僅僅是文字規則,並嘗試玩規則的順序。 – Divisadero