我正在使用 ANTLR 3.5。我想构建一个评估布尔表达式的语法,例如
x=true;
b=false;
c=true;
a=x&&b||c;
并通过 Java 调用取回评估结果(如ExprParser.eval()
上述条目将返回 true。)
我会期待一个例子。
我正在使用 ANTLR 3.5。我想构建一个评估布尔表达式的语法,例如
x=true;
b=false;
c=true;
a=x&&b||c;
并通过 Java 调用取回评估结果(如ExprParser.eval()
上述条目将返回 true。)
我会期待一个例子。
您可以执行以下操作(使用我在问题评论中链接到的语法上下文):
首先,声明一个成员来存储最新的评估结果:
@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); }