目录
ANTLR开发期间,常常会遇到各种错误,现在总结如下:
在写ANTLR的grammar时,经常会遇到:
The following token definitions can never be matched because prior tokens match the same input
对于这样的问题,之前遇到过很多。
后来,算是有点明白了,所以专门整理出来其原因和一般的解决思路:
另外,之前遇到过很多次,有需要的可以去参考:
在写ANTLR的grammar时,经常会遇到,多重匹配的问题:
一般的小问题,都可以自己慢慢修改代码,而搞定的。
比如:
【已解决】antrl代码编译出错:Decision can match input such as "’#include’" using multiple alternatives: 1, 2
其他的,也有之前不够熟悉antlr时,没有解决的问题:
【未解决】antlr语法警告:warning: Decision can match input such as "WS" using multiple alternatives: 1, 2
但是实际上,经过后来的折腾,早就解决了的。
但是,有时候,也会遇到比较难处理而始终搞不定的,比如:
写antlr语法期间,调试期间,遇到最多的,可能就属不匹配的问题了。
对于不匹配的问题,其原因有各种各样,而导致不匹配的。
目前已经遇到的,大致有这几类:
比如:
【已解决】antlr中支持EDDL的多国语言字符串其中用的是rule而非token
【已解决】antlr中匹配OPERATOR出错:mismatched input ‘&’ expecting set null
【已解决】antlr解析出错:MismatchedSetException(0!=null)
【已解决】antlr解析双引号出错:MismatchedTokenException(0!=0)
【未解决】antlr中不识别双引号(double quote)
【基本解决】antlr v3,用包含{$channel=HIDDEN;}语法,结果解析出错:MissingTokenException
如果是自己语法不小心写错了,自己仔细调试后,还是可以发现。
然后改为正确的所要匹配的内容,即可。
ANTLR v4中,由于一些语法的变化,导致语法检查更严格,有时候也会导致此类mismatch的问题:
【已解决】antlr v4的语法出错:line 1:0 mismatched input ‘a’ expecting A
详见:
详见:
【已解决】antlr出错no viable alternative at input ‘__LBL__show’
【已解决】antlr解析字符串STRING出错:no viable alternative at input,对应的错误是NoViableAltException(0@[null])
【已解决】antlr调试语法代码时出错:mismatched character ’5′ expecting ‘I’,no viable alternative at input ’7′
【已解决】antlr调试解析出错:NoViableAltException(0@[null])
【已解决】Antlr v3代码编译出错:syntax error: antlr: NoViableAltException(37@[])
如果ANTLR语法写的有问题的话,则是无法生成对应的代码的。
错误有多种可能:
比如是由于符号类型冲突而无法生成代码,详见:
有时候,是在ANTLR的option中,添加了一些不支持的参数或选项,则导致此错误。
比如:
【已解决】antlr语法出错:rewrite syntax or operator with no output option; setting output=AST