[英]antlr4 mismatched input 'a' expecting NAME
我簡化了發生錯誤的代碼:
grammar simperr;
var
: VAR_IDS NAME EQU NAME SPLIT
;
VAR_IDS : ('var'|'let')+;
LETTER : [a-zA-Z$_];
NUM : [0-9];
NAME : LETTER (LETTER|NUM)*;
EQU : '=';
SPLIT : ';';
WS : [ \t\n\r]+ -> skip;
我明白了
var a=ijf;
enter var, LT(1)=var
consume [@0,0:2='var',<1>,1:0] rule var
line 1:4 mismatched input 'a' expecting NAME
exit var, LT(1)=<EOF>
我已經嘗試了很多方法,但是沒有一種可以用。有人可以幫我嗎?
如果打印標流為您的輸入(通過添加-tokens
作為參數傳遞給grun
),你會看到a
被公認的LETTER
,而不是一個WORD
。 發生這種情況是因為LETTER
和WORD
產生相同長度的匹配(即兩者都匹配a
),而LETTER
在語法中排在第一位(這被稱為最大munch規則)。
因此,您可以通過在單詞規則之后移動LETTER
規則來解決您的問題,但由於您實際上從未想要在任何情況下生成LETTER
標記,因此更好的解決方案是通過將規則標記為fragment
來告訴ANTLR。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.