我已经开始使用ANTLR,并注意到它的词法分析规则相当变幻无常.一个非常令人沮丧的例子如下:
grammar output;
test: FILEPATH NEWLINE TITLE ;
FILEPATH: ('A'..'Z'|'a'..'z'|'0'..'9'|':'|'\\'|'/'|' '|'-'|'_'|'.')+ ;
NEWLINE: '\r'? '\n' ;
TITLE: ('A'..'Z'|'a'..'z'|' ')+ ;
Run Code Online (Sandbox Code Playgroud)
这个语法不匹配:
c:\ test.txt
x
奇怪的是,如果我改变TITLE为TITLE: 'x' ;它仍然失败,这次给出一个错误消息说"不匹配的输入'x'期待'x'"这是非常混乱.更奇怪的是,如果我替换的使用TITLE在test与FILEPATH整个事情的作品(虽然FILEPATH将匹配多于我期待相符所以总的来说这是对我并没有有效的解决方案).
我非常困惑为什么ANTLR会给出如此极其奇怪的错误,然后突然出现问题时,没有明显的原因.