“!”、“^”和“$”在 Antlr3 中有特殊含义吗?
Did "!", "^" and "$" had a special meaning in 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 中使用:它们用于引用 sub-rules 或标记:
expression
: lhs=expression operator=(PLUS | MINUS) rhs=expression
| NUMBER
;
以便在嵌入式代码块中,您可以执行:$lhs.someField.someMethod()
。在您的情况下,您也可以删除它们,因为它们可能仅用于树重写规则。
编辑
kaby76 has a Github page with some instructions for converting grammars to ANTLR4: https://github.com/kaby76/AntlrVSIX/blob/master/doc/Import.md#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 中使用:它们用于引用 sub-rules 或标记:
expression
: lhs=expression operator=(PLUS | MINUS) rhs=expression
| NUMBER
;
以便在嵌入式代码块中,您可以执行:$lhs.someField.someMethod()
。在您的情况下,您也可以删除它们,因为它们可能仅用于树重写规则。
编辑
kaby76 has a Github page with some instructions for converting grammars to ANTLR4: https://github.com/kaby76/AntlrVSIX/blob/master/doc/Import.md#antlr3