获得不一致的结果

时间:2017-02-10 05:38:25

标签: antlr antlr4

我正在使用ANTLR 4.6而我正试图对语法进行一些清理并最终打破它。我发现它是因为我做了以下改变,我认为这是相同的。有人可以解释为什么他们不同吗?

首先尝试

DIGIT : [0-9] ;
LETTER : [a-zA-Z] ;
ident : ('_'|LETTER) ('_'|LETTER|DIGIT)* ;

第二次尝试

DIGIT : [0-9] ;
LETTER : [a-zA-Z_] ;
ident : LETTER (LETTER | DIGIT)* ;

两者产生的结果都不同于此

DIGIT : [0-9] ;
LETTER : [a-zA-Z_] ;
IDENT : LETTER (LETTER | DIGIT)* ;

1 个答案:

答案 0 :(得分:0)

在你的两次尝试中,你将你的身份规则从词法分析器规则改为解析器规则,因为你用小写字母写了它,因为它是与第二次尝试的唯一区别,我认为这是问题所在。词法分析器规则用于定义用于解析的标记,解析规则定义了构建AST的方式。请注意,进行这样的更改会导致AST构建方式的巨大差异。