【发布时间】:2011-05-16 22:40:02
【问题描述】:
我正在寻找一种方法来了解是否使用了可选的子规则。例如:
my_rule returns [node* n = 0]:
(v = (optional_subrule)?)
{
$n = new node($v ? $v.n : MY_DEFAULT_VALUE);
}
;
但这不起作用。我尝试了很多方法来编写它,如果不编写代码似乎什么都不可能......
my_rule returns [node* n = new node()]:
((optional_subrule { n->set_subrule(...); })?)
;
当你有野牛背景时,你喜欢在你的规则末尾加上你的 ast 节点构造函数……这会降低可读性(想象一个更大的规则)。
有人知道我错过了什么吗?
谢谢。
【问题讨论】:
标签: parsing antlr bison antlr3 abstract-syntax-tree