如何解决在Antlr3中,“!”,“ ^”和“ $”是否有特殊含义吗? 编辑
我没有关于ANTLR的任何先验知识(我最近对ANTLR4有了一些了解),但是我必须将旧的语法转换为较新的版本,而eclipse告诉我,对于这些字符,它们是不可行的替代品,显示语法错误“'!”令我完全惊讶”。 我已经删除了这些字符,这并不是一个问题,但也许它在ANTLR3中具有特殊功能。 预先感谢。
global_block:
DATABASE! IDENTIFIER!
| GLOBALS! define_section!+ END! GLOBALS!
| GLOBALS! STRING!
;
main_block: MAIN sequence? END em=MAIN
-> ^(MAIN MAIN '(' ')' sequence? $em)
;
解决方法
^
和->
与树重写有关:https://theantlrguy.atlassian.net/wiki/spaces/ANTLR3/pages/2687090/Tree+construction
ANTLR4不支持它(v4具有用于树遍历的侦听器和访问者,但是不再重写)。只需在解析器规则中删除所有这些!
和-> ...
(不要删除-> ...
之类的词法分析器规则中的-> channel(...)
,v4仍支持此规则)。
因此,在您的情况下,这些规则在ANTLR4中将有效:
global_block
: DATABASE IDENTIFIER
| GLOBALS define_section+ END GLOBALS
| GLOBALS STRING
;
main_block
: MAIN sequence? END MAIN
;
$
仍可以在ANTLR4中使用:它们用于引用子规则或令牌:
expression
: lhs=expression operator=(PLUS | MINUS) rhs=expression
| NUMBER
;
,以便在嵌入式代码块中可以执行:$lhs.someField.someMethod()
。就您而言,您也可以删除它们,因为它们可能仅在树重写规则中使用。
编辑
kaby76有一个Github页面,其中包含一些将语法转换为ANTLR4的说明:https://github.com/kaby76/AntlrVSIX/blob/master/doc/Import.md#antlr3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。