为什么'a'..'z'在 ANTLR 中匹配通配符,例如 $ 或 £
当我运行以下语法时:
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
并且输入“?test”时,为什么antlr接受它作为有效输入?我认为 ('a'..'z') 只会匹配小写字母中的字符?
When I run the following grammer:
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
and I give the input "?test" why does antlr accept this as valid input? I thought the ('a'..'z') would only match characters within the lowercase alphabet?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当使用您发布的语法解析输入字符串
?test
时,ANTLR 确实会产生错误。通常情况下,错误在于 ANTLR 周围使用的工具(不幸的是,我发现 ANTLRWorks 也经常发生这种情况!)。要自行测试(正确),请创建一个文件
Test.g
:和一个文件
Main.java
:并下载 ANTLR 3.2 JAR 在同一目录中。
现在生成一个词法分析器 &解析器:
编译所有 Java 源文件:
并运行 Main 类:
(如果使用的是 Windows,请将
:
替换为;
!)将产生以下错误消息:
ANTLR does produce an error when parsing the input string
?test
with the grammar you posted. As is usually the case, the error lies with the tool being used around ANTLR (I see it happen a lot with ANTLRWorks as well, unfortunately!).To test it yourself (properly), create a file
Test.g
:and a file
Main.java
:and download a copy of the ANTLR 3.2 JAR in the same directory.
Now generate a lexer & parser:
compile all Java source files:
and run the Main class:
(replace the
:
with;
if you're on Windows!)which will produce the following error message: