簡體   English   中英

antlr4不匹配輸入'a'期待NAME

[英]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 發生這種情況是因為LETTERWORD產生相同長度的匹配(即兩者都匹配a ),而LETTER在語法中排在第一位(這被稱為最大munch規則)。

因此,您可以通過在單詞規則之后移動LETTER規則來解決您的問題,但由於您實際上從未想要在任何情況下生成LETTER標記,因此更好的解決方案是通過將規則標記為fragment來告訴ANTLR。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM