我正在使用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)* ;
答案 0 :(得分:0)
在你的两次尝试中,你将你的身份规则从词法分析器规则改为解析器规则,因为你用小写字母写了它,因为它是与第二次尝试的唯一区别,我认为这是问题所在。词法分析器规则用于定义用于解析的标记,解析规则定义了构建AST的方式。请注意,进行这样的更改会导致AST构建方式的巨大差异。