ANTLR4留白引起的问题
本文关键字:问题 留白 ANTLR4 | 更新日期: 2023-09-27 18:15:16
我已经使用coor很长一段时间了,我想我应该看看ANTLR4。我使用的是c#版本的ANTLR4。我把语法的开头放在一起,发现它不起作用。经过大量的实验,我发现这个问题归结为空白的问题。下面是一个小语法来演示这个问题:
grammar AB;
/*
* Parser Rules
*/
parse: ab;
ab: IDENT ( ',' IDENT )*;
/*
* Lexer Rules
*/
IDENT: A_Z_ ( A_Z_ | DIGIT )*;
fragment A_Z_: [A-Z,a-z,_];
fragment DIGIT: [0-9];
WS: [ 't'r'n]+ -> skip;
当给出语法输入时,我得到:
A,B无语法错误
A, B无语法错误
A, B给出:Line: 1多余的输入'B'期待{,','}
A,B给出:Line: 1多余输入',B'期待{,','}
我可能在我对空白处理的理解中遗漏了一些东西,但我认为WS规则应该扔掉所有的空白,所以任何输入都相当于A,B输入。此外,如果我评论掉WS规则,也没有什么区别。就好像WS规则什么都没做。
问题是在您的IDENT规则中使用了逗号。
不做:
fragment A_Z_: [A-Z,a-z,_];
但是这样做:
fragment A_Z_: [A-Za-z_];