我正在尝试重写我的AST并输出语义警告。 如果我使用[]和词法分析器规则它接受但不是解析器规则为什么? 我有一个名为“var”的解析器规则,我想通过执行以下操作来测试该值:
-> ^(DECLARATION TYPE var[Main.symbols.test_declared($var.text)] expression?);
但我明白了:
unexpected token: Main.symbols.test_declared($var.text)
有办法解决这个问题吗?
我见过的大多数教程只使用了LEXER规则,但我不能根据我的语法,例如IDENTIFIER是var的一部分。
答案 0 :(得分:1)
在ANTLR 3中,var[xxx]
语法意味着您将xxx
作为参数传递给var
规则。如果这不是您想要做的,那么您需要明确说明您的目标是什么。在重写规则(在->
运算符的右侧)内部,var
规则已经完成,因此参数无意义。您可以仅使用var
-> ^(DECLARATION TYPE var expression?);