解析两个由双点分隔符分隔的整数的Antlr4无法匹配整数

时间:2016-09-14 21:31:06

标签: regex parsing grammar antlr4

我试图在antlr4中使用模式<int1>..<int2>解析一个令牌,而我现在所做的是一个简单的方法,如:

main: INT1 '..' INT2;
INT1: NUMBER;
INT2: NUMBER;
NUMBER: [0-9]+ ;

但是,当我尝试使用输入1..10测试规则main时出现错误:

  

输入不匹配&#39; 1&#39;期待NUMBER

这意味着我总是会错过匹配第一个int,但是我的第二个int将匹配。

我真的很困惑,我认为鉴于令牌<int1><int2>相同的NUMBER词法分析器规则会导致相同的匹配,但显然它不能完成工作在我的情况下。有人有什么想法吗?感谢

3 个答案:

答案 0 :(得分:1)

您混淆了令牌和语法规则的概念。 你的语法包含两个标记(INT和'..')和一个规则:

main: int1=INT '..' int2=INT;

INT: [0-9]+ ;

答案 1 :(得分:0)

正如@KvanTTT在他的回答中提到的,我搞砸了令牌规则和语法规则。我的方法也是这样的:

main: int1 '..' int2;
int1: NUMBER;
int2: NUMBER;
NUMBER: [0-9]+ ;

答案 2 :(得分:0)

你的错误是这样的:你有2个匹配相同输入的词法规则。但是,只有一个可以匹配。 ANTLR使用较长的匹配。如果有多个规则匹配相同的长度,则第一个获胜。

顺便说一下。如果您在输入时遇到问题,则需要提供一个重要提示:在令牌进入时打印您的令牌(使用令牌流)。在你的情况下,你可能得到:INT1, .., INT1,这显然与你的语法不符。