[英]ANTLR4 integer parsing fail
我正在尝试使用antlr 4解析文件,但我不明白为什么不解析多于一个数字的整数(行79:44在输入'17'处没有可行的选择)。
这是整个语法http://pastebin.com/rxktvUBi
这是int的定义
fragment DIGIT : [0-9] ;
integer : DIGIT+ ;
这根本不起作用。 这个版本
integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ;
仅适用于1位整数。
这是未解析的行的示例
struct p_77_bound_17_or: ((bound(MEK)<=17) | (bound(MEKPP)<=17))
问题出在
simple_expression:
(integer)+
请注意,如果我使用标识符
ID:
('a'..'z'|'A'..'Z'|'0'..'9'|'_')+;
identifier: ID;
代替整数
simple_expression:
identifier
这样可行。
为什么? 任何想法?
您的integer
规则是解析器规则,而不是词法分析器规则。 它引用的'0'
, '1'
等文字被隐式转换为词法分析器规则,每个规则都与一位数字匹配。 您应该改为使用以下词法分析器规则:
INTEGER : '0'..'9'+;
或在ANTLR 4中,只需执行以下操作:
INTEGER : [0-9]+;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.