遵循具有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规则DataType
和DimensionName
...
DataType: 'integer' | 'decimal';
DimensionName : LETTER (LETTER)*; // greedy
...
当DimensionName
匹配每个字符时,"整数"键入为DimensionName
而不是DataType
。对于" SDARSFD整数",Lexer会产生两个DimensionName
令牌,因此dim
规则无法匹配。通过切换两个Lexer规则,Lexer会产生DimensionName
代币和DataType
代币,与dim
规则匹配。
另外,您可以将LETTER
和DIGIT
定义为片段:
fragment LETTER : [a-zA-Z];
fragment DIGIT : [0-9];
除非您希望将它们与独立令牌匹配(在您的语法中," A"将作为LETTER
键入)。