Antlr V4语法由于EOF不匹配而无法解析



遵循具有antlr v4的简单语法。行走时的语法会产生错误消息 **行1:14不匹配的输入''期望dimensionname*

对于诸如" sdarsfd Integer"之类的微不足道输入(没有引号)。

因此,提到的F类似错误,也许在4.3期限内提交了错误。我一直在使用antlr 4.5。

任何帮助/指针/解决方案?

/**
  A simple parser for a dimension declaration
*/
grammar Simple;
definition : dim;
dim : DimensionName DataType;
DimensionName : LETTER (LETTER)*; // greedy
DataType: 'integer' | 'decimal';
LETTER : [a-zA-Z];
DIGIT : [0-9];
WS: [ tnr]+ -> skip;

您只需要切换两个Lexer规则DataTypeDimensionName

...
DataType: 'integer' | 'decimal';
DimensionName : LETTER (LETTER)*; // greedy
...

DimensionName匹配每个字符时,"整数"键入为DimensionName而不是DataType。对于" SDARSFD整数",Lexer会产生两个DimensionName令牌,因此dim规则无法匹配。通过切换两个Lexer规则,Lexer会产生DimensionName代币和DataType代币,与dim规则匹配。

另外,您可以将LETTERDIGIT定义为片段:

fragment LETTER : [a-zA-Z];
fragment DIGIT : [0-9];

除非您希望将它们与独立令牌匹配(在您的语法中," A"将作为LETTER键入)。

相关内容

  • 没有找到相关文章

最新更新