1

次のようなユーザー指定のブール式文字列を最もよく評価するにはどうすればよいですか。

A & B | (C & !D)

これは何のために必要ですか?例:一連の人がいて、ユーザーが入力フィールドを持っていて、次のStringように記述されたブール式でこれらの人の2つ(およびそれ以上)を接続できるとします。

Peter & Klaus | (Peter & Clair | !Klaus)

(例として、この式は意味をなさないことを私は知っています)。

次に、ブール文法を使用して、このブール文字列を何らかの方法で分割します。後で、人の名前が変更された場合(Peter-> Johnなど)、ユーザーが指定した式も新しい名前で自動名前変更されるようにします。これにより、ユーザーは保存された式が新しい名前で更新されたことがわかります。

したがって、名前の背後にあるオブジェクトを表すIDを使用してブール式を格納する必要があります。したがって、db内の式から各名前を検索する必要があります。したがって、ブール文法で文字列を分割する必要があります。

質問:

  • この文字列をどのように分割するのが最適ですか?

  • 名前が変更されたときにこの文字列を再評価できるように、オブジェクト値を使用してこの式を保存するにはどうすればよいですか?

4

1 に答える 1

1

1つの解決策は、ノードが名前、演算子、または式のいずれかを格納できるノードのツリーに情報を解析することです。各ノードでIDを使用して、名前などを後で置き換えることができます。

解析自体を行うための基本は非常に簡単です。それはすべて、これらの式がどれほど複雑になるか、またはなり得るかに依存します。ブール式の適切で完全な文法を実行するには、antlrのようなパーサーツールをお勧めします。

于 2013-03-18T12:49:26.913 に答える