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