1

我正在尝试使用 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

这样可行。

为什么?任何想法?

4

1 回答 1

8

您的integer规则是解析器规则,而不是词法分析器规则。它引用的'0','1'等文字被隐式地转换为词法分析器规则,每个规则都匹配一个数字。您应该改为使用以下词法分析器规则:

INTEGER : '0'..'9'+;

或者在 ANTLR 4 中,简单地说:

INTEGER : [0-9]+;
于 2013-02-22T15:17:17.050 回答