Antlr4 解析由双点定界符分隔的两个整数无法匹配整数
Antlr4 parsing two Integers separated by double-dots delimiter failed to match integers
我正在尝试在 antlr4 中解析一个带有模式 <int1>..<int2>
的标记,我现在正在做的是一种简单的方法,例如:
main: INT1 '..' INT2;
INT1: NUMBER;
INT2: NUMBER;
NUMBER: [0-9]+ ;
但是,当我尝试使用输入 1..10
测试规则 main 时,出现错误:
mismatched input '1' expecting NUMBER
这意味着我总是会错过匹配第一个整数,但我的第二个整数会被匹配。
我真的很困惑,我认为给定令牌 <int1>
和 <int2>
相同的 NUMBER
词法分析器规则应该导致相同的匹配,但显然它没有完成这项工作就我而言。有人有什么想法吗?谢谢
您混淆了标记和语法规则的概念。
您的语法包含两个标记(INT 和'..')和一个规则:
main: int1=INT '..' int2=INT;
INT: [0-9]+ ;
正如@KvanTTT 在他的回答中提到的,我弄乱了令牌规则和语法规则。我的方法也是这样工作的:
main: int1 '..' int2;
int1: NUMBER;
int2: NUMBER;
NUMBER: [0-9]+ ;
你的错误是:你有 2 个词法分析器规则匹配相同的输入。然而,只有一个可以匹配。 ANTLR 使用更长的匹配。如果有多个规则匹配相同的长度,则第一个获胜。
顺便说一句。如果您无法匹配您的输入,一个重要提示:打印您的令牌(为此使用令牌流)。在您的情况下,您可能得到:INT1, .., INT1
,这显然与您的语法不符。
我正在尝试在 antlr4 中解析一个带有模式 <int1>..<int2>
的标记,我现在正在做的是一种简单的方法,例如:
main: INT1 '..' INT2;
INT1: NUMBER;
INT2: NUMBER;
NUMBER: [0-9]+ ;
但是,当我尝试使用输入 1..10
测试规则 main 时,出现错误:
mismatched input '1' expecting NUMBER
这意味着我总是会错过匹配第一个整数,但我的第二个整数会被匹配。
我真的很困惑,我认为给定令牌 <int1>
和 <int2>
相同的 NUMBER
词法分析器规则应该导致相同的匹配,但显然它没有完成这项工作就我而言。有人有什么想法吗?谢谢
您混淆了标记和语法规则的概念。 您的语法包含两个标记(INT 和'..')和一个规则:
main: int1=INT '..' int2=INT;
INT: [0-9]+ ;
正如@KvanTTT 在他的回答中提到的,我弄乱了令牌规则和语法规则。我的方法也是这样工作的:
main: int1 '..' int2;
int1: NUMBER;
int2: NUMBER;
NUMBER: [0-9]+ ;
你的错误是:你有 2 个词法分析器规则匹配相同的输入。然而,只有一个可以匹配。 ANTLR 使用更长的匹配。如果有多个规则匹配相同的长度,则第一个获胜。
顺便说一句。如果您无法匹配您的输入,一个重要提示:打印您的令牌(为此使用令牌流)。在您的情况下,您可能得到:INT1, .., INT1
,这显然与您的语法不符。