java永远无法实现以下替代方案:2
我试图创建一个非常简单的语法来学习使用ANTLR,但我得到了以下信息:
“以下备选方案永远无法实现:2”
这是我的语法尝试:
grammar Robot;
file : command+;
command : ( delay|type|move|click|rclick) ;
delay : 'wait' number ';';
type : 'type' id ';';
move : 'move' number ',' number ';';
click : 'click' ;
rclick : 'rlick' ;
id : ('a'..'z'|'A'..'Z')+ ;
number : ('0'..'9')+ ;
WS : (' ' | '\t' | '\r' | '\n' ) { skip();} ;
我正在为IDEA使用ANTLRWorks插件:
# 1 楼答案
解析器规则中的
..
(range)与lexer规则中的不同。在lexer规则中,它的意思是:“从char X到char Y”,在解析器规则中,它匹配“从令牌M到令牌N”。由于您将number
作为一个解析器规则,它不会做您认为它会做的事情(因此会收到一条模糊的错误消息)解决方案是:将
number
变成一个lexer规则(因此,将其大写:Number
):正如你所看到的,我还制定了
id
、click
和rclick
词法规则。如果你不确定语法分析器和词法分析器规则之间的区别,请说出来,我将对这个答案进行解释