微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Antlr3中,“!”,“ ^”和“ $”是否有特殊含义吗? 编辑

如何解决在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 举报,一经查实,本站将立刻删除。