Fab*_* F. 1 parsing integer parser-generator antlr4
我正在尝试使用antlr 4解析文件,我无法理解为什么不能解析多于一位的整数(第79:44行在输入'17'处没有可行的替代方案).
这是有趣的语法http://pastebin.com/rxktvUBi
这是int的定义
fragment DIGIT : [0-9] ;
integer : DIGIT+ ;
Run Code Online (Sandbox Code Playgroud)
这根本不起作用.这个版本
integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ;
Run Code Online (Sandbox Code Playgroud)
仅适用于1位整数.
这是未解析的行的示例
struct p_77_bound_17_or: ((bound(MEK)<=17) | (bound(MEKPP)<=17))
Run Code Online (Sandbox Code Playgroud)
问题在于
simple_expression:
(integer)+
Run Code Online (Sandbox Code Playgroud)
请注意,如果我使用标识符
ID:
('a'..'z'|'A'..'Z'|'0'..'9'|'_')+;
identifier: ID;
Run Code Online (Sandbox Code Playgroud)
而不是整数
simple_expression:
identifier
Run Code Online (Sandbox Code Playgroud)
这样可行.
为什么?任何的想法?
您的integer
规则是解析器规则,而不是词法分析器规则.的'0'
,'1'
等文字引用它是隐式变成相互匹配单个数字,其词法分析规则.您应该制定以下词法规则:
INTEGER : '0'..'9'+;
Run Code Online (Sandbox Code Playgroud)
或者在ANTLR 4中,只需:
INTEGER : [0-9]+;
Run Code Online (Sandbox Code Playgroud)