2013-02-22 101 views
1

我想解析一个文件与antlr 4,我不明白为什么整数多个数字不解析 (行79:44没有可行的替代在输入'17')。ANTLR4整数解析失败

这是entier语法http://pastebin.com/rxktvUBi

这里是INT

fragment DIGIT : [0-9] ; 
integer : DIGIT+ ; 

不工作在所有的定义。此版本

integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ; 

仅适用于1位整数。

这不是parsified线的一个例子

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 

工作。

为什么?任何想法?

回答

7

您的integer规则是解析器规则,而不是词法分析器规则。 '0','1'等它引用的文字被隐含地转换成词法规则,每个规则匹配一个数字。您应该进行以下词法规则来代替:

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

还是在ANTLR 4,简单:

INTEGER : [0-9]+;