0

我正在使用 ANTLR 3.5。我想构建一个评估布尔表达式的语法,例如

x=true;
b=false;
c=true;
a=x&&b||c;

并通过 Java 调用取回评估结果(如ExprParser.eval()上述条目将返回 true。)

我会期待一个例子。

4

1 回答 1

1

您可以执行以下操作(使用我在问题评论中链接到的语法上下文):

首先,声明一个成员来存储最新的评估结果:

@members {
    private int __value;
}

然后,每当你计算一些东西时设置它

stat:   expr NEWLINE { __value = $expr.value; } | // rest of the stat entry

最后,在stat计算完所有 s 后返回它:

// will return 0 if no expr blocks were evaluated
public prog returns [int value]:   stat+ {$value = __value;};

在 C# 中,我使用了稍微不同的方法——我向解析器添加了一个事件,并在可以计算表达式结果时引发它。客户端可以订阅此事件并接收所有计算结果。

@members
{ 
    public event Action<int> Computed;
}

stat:   expr NEWLINE  { Computed($expr.value); }
于 2013-06-04T13:24:43.777 回答