1
我正在写一个解释一个简单的DSL,不知道如何优雅地实现IF-THEN-ELSE评估。我从antlr.org网上找到了一个例子,但它实际上使用了CommonTreeNodeStream中的getNodeIndex(),它受到保护,所以没用。我能做的最好的是以下几点:生成的if-then-else的评估ANTLR的V3树分析器
ifblock
@init
{
int t = 0;
int f = 0;
}
@after
{
if(c)
stream.push(t);
else
stream.push(f);
statements(); // handle the statements in then or else branch
stream.pop()
}
: ^(IF c=condition {t = input.mark();}. {f = input.mark();}.)
;
这是工作,但我不是很满意莫名其妙。有没有更好的办法?
感谢。我实际上使用访问者模式编写了自己的评估者,但是他决定用树语法去分析一下,看看它是否可行。我现在可以更清楚地看到利弊。很多“如何正确地做X”是惯例而不是硬性规则,我肯定需要用Antlr来学习:) – ntrolls 2011-12-14 14:42:40