我根本不知道如何ANTLR的作品。使用下面的语法:ANTLR和空字符串矛盾的行为
blockcomment : '/\*' ANYCHARS '\*/';
ANYCHARS : ('a'..'z' | '\n' | 'r' | ' ' | '0'..'9')* ;
我得到一个警告消息时,我编译语法文件,上面写着:
“非片段的词法规则‘ANYCHARS’可以匹配空字符串”
精细。我希望它能够匹配空字符串,因为:"/\*\*/"
完全有效。但是,当我在TestRig运行"/\*\*/"
我得到:
在'*/'
显然缺少ANYCHARS我可以改变它,这样'/**/'
被作为特殊情况处理:
blockcomment : '/\*' ANYCHARS '\*/' | '/**/';
但是,没有按”真的解决了潜在的问题。有人可以向我解释我做错了什么吗? ANTLR如何提出关于匹配空字符串的警告,然后不能同时匹配它们?
还不行。我在运行时遇到同样的确切错误。警告消息更改为:解析器中令牌“ANYCHARS”的隐式定义。所以看起来它仍然在努力成为一个令牌。 – jcfolsom
哦。抱歉。使块注释成为词法分析规则而不是解析器规则。 ;) –