用[]重写树

时间:2013-08-20 14:32:50

标签: antlr antlr3

我正在尝试重写我的AST并输出语义警告。 如果我使用[]和词法分析器规则它接受但不是解析器规则为什么? 我有一个名为“var”的解析器规则,我想通过执行以下操作来测试该值:

-> ^(DECLARATION TYPE var[Main.symbols.test_declared($var.text)] expression?);

但我明白了:

unexpected token: Main.symbols.test_declared($var.text)

有办法解决这个问题吗?

我见过的大多数教程只使用了LEXER规则,但我不能根据我的语法,例如IDENTIFIER是var的一部分。

1 个答案:

答案 0 :(得分:1)

在ANTLR 3中,var[xxx]语法意味着您将xxx作为参数传递给var规则。如果这不是您想要做的,那么您需要明确说明您的目标是什么。在重写规则(在->运算符的右侧)内部,var规则已经完成,因此参数无意义。您可以仅使用var

来引用结果
-> ^(DECLARATION TYPE var expression?);