我根本不明白 antlr 是如何工作的。使用以下语法:
blockcomment : '/\*' ANYCHARS '\*/';
ANYCHARS : ('a'..'z' | '\n' | 'r' | ' ' | '0'..'9')* ;
我在编译语法文件时收到一条警告消息:
“非片段词法分析器规则'ANYCHARS'可以匹配空字符串”
很好。我希望它能够匹配空字符串,因为 "/\*\*/"
是完全有效的。但是当我在 TestRig 中运行 "/\*\*/"
时,我得到:
在 '*/'
处缺少 ANYCHARS
显然我可以更改它,以便将 '/**/'
作为特殊情况处理:
blockcomment : '/\*' ANYCHARS '\*/' | '/**/';
但这并没有真正解决根本问题。有人可以向我解释我做错了什么吗? ANTLR 如何发出有关匹配空字符串的警告,然后又不同时匹配它们?
最佳答案
将“片段”添加到 ANYCHARS?然后它将执行您想要的操作。
关于ANTLR 和空字符串的矛盾行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420899/