私は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); }