使用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;
答案 0 :(得分:1)
您只需要切换两个词法规则DataType
和DimensionName
...
DataType: 'integer' | 'decimal';
DimensionName : LETTER (LETTER)*; // greedy
...
当DimensionName
匹配每个字符时,'整数'的输入为DimensionName
而不是DataType
。对于“sdarsfd整数”,词法分析器会生成两个DimensionName
标记,因此dim
规则无法匹配。通过切换两个词法分析器规则,词法分析器会生成一个DimensionName
标记和一个与DataType
规则匹配的dim
标记。
此外,您可以将LETTER
和DIGIT
定义为片段:
fragment LETTER : [a-zA-Z];
fragment DIGIT : [0-9];
除非你希望它们作为独立令牌匹配(在你的语法中,“a”将被输入为LETTER
)。