由于EOF不匹配,ANTLR v4语法无法解析

时间:2015-05-12 06:53:59

标签: antlr4

使用ANTLR v4遵循简单的语法。走路时这个语法会产生错误信息       **第1:14行不匹配的输入''期待DimensionName *

用于简单输入,例如" sdarsfd整数" (不带引号)。

SO提到了类似的错误,并且可能在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: [ \t\n\r]+ -> skip;

1 个答案:

答案 0 :(得分:1)

您只需要切换两个词法规则DataTypeDimensionName

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

DimensionName匹配每个字符时,'整数'的输入为DimensionName而不是DataType。对于“sdarsfd整数”,词法分析器会生成两个DimensionName标记,因此dim规则无法匹配。通过切换两个词法分析器规则,词法分析器会生成一个DimensionName标记和一个与DataType规则匹配的dim标记。

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

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

除非你希望它们作为独立令牌匹配(在你的语法中,“a”将被输入为LETTER)。