我试图在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
词法分析器规则会导致相同的匹配,但显然它不能完成工作在我的情况下。有人有什么想法吗?感谢
答案 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
,这显然与你的语法不符。