ANTLR4整数解析失败

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)

这样可行.

为什么?任何的想法?

Sam*_*ell 7

您的integer规则是解析器规则,而不是词法分析器规则.的'0','1'等文字引用它是隐式变成相互匹配单个数字,其词法分析规则.您应该制定以下词法规则:

INTEGER : '0'..'9'+;
Run Code Online (Sandbox Code Playgroud)

或者在ANTLR 4中,只需:

INTEGER : [0-9]+;
Run Code Online (Sandbox Code Playgroud)