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

最後に、すべてのstats が計算されたらそれを返します。

// 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 に答える