繁体   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