我已经使用CoCoR很长一段时间了,我想我应该看看ANTLR4。我使用的是ANTLR4的C#版本。我把语法的开头部分放在一起,发现它不起作用。经过大量的实验,我发现问题归结为空格的问题。下面是演示这个问题的一个小语法:
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‘应为{,','}
在我对空格处理的理解中,我可能遗漏了一些东西,但我认为WS规则应该丢弃所有的空格,所以任何输入都应该等同于A、B输入。另外,如果我注释掉WS规则,也没有什么不同。这就好像WS规则什么也不做一样。
发布于 2014-07-27 13:06:51
问题是您的IDENT规则中使用了逗号。
不要这样做:
fragment A_Z_: [A-Z,a-z,_];但要这样做:
fragment A_Z_: [A-Za-z_];https://stackoverflow.com/questions/24977892
复制相似问题