実行時に生成されるJavaでブール式を評価する
-
27-10-2019 - |
質問
Javaプログラムで実行時に生成される複雑なブール式を評価するにはどうすればよいですか?
例:
(xおよびyまたはz)およびs
x、y、zブール変数を使用...
ありがとう
解決
http://docs.codehaus.org/display/JANINO/Home を使用します最小限の作業のため。単純な表現以上のことができます。
他のヒント
簡単に言うと、ブール式の「中間表現」が必要です。これは、Node
オブジェクトで形成されたツリーです。 Node
には、AndNode
、OrNode
、NotNode
、およびVariableNode
のサブクラスがあります。ジェネラコディセタグコードには2つの子ジェネラコディセタグコードがあり、ジェネラコディセタグコードには2つの子ジェネラコディセタグコードがあり、ジェネラコディセタグコードには1つの子ジェネラコディセタグコードがあります。
AndNode
には、「x」などの変数名Stringがあります。各変数名キーにブール値が関連付けられているNode
があります。
各ノードクラスには、その式を評価してOrNode
を返すNode
メソッドがあります。 NotNode
メソッドは、Node
内の変数の値を検索し、それを返します。 VariableNode
はHashMap<String, Boolean>
を返します。 eval()
はboolean
を返し、VariableNode.eval()
はHashMap
を返します。ブール式ツリー全体を評価するには、ルートノードのNotNode.eval()
メソッドを呼び出すだけです。
これらのブール式ツリーは、Javaコンストラクターなどを使用してプログラムで構築できます。
文字列から式ツリーを構築する場合は、文字列からツリーを生成するパーサーを作成する必要があります。テレンスパールの
論理式を評価する方法は?このような論理式は構文木として評価できます。この関連する質問
もう1つ頭に浮かぶのは、論理式をデータとして処理できるようにしたいということです。これは、Jython、JRuby、Groovy、Scalaなどのスクリプト言語に適しているようです(制限されていると仮定します)。JVM)。基本的な式や論理的でない式を処理するパーサーを作成するのは非常に難しいとは思いませんが。
式ツリーを生成し、各リーフをブール値にバインドする必要があります。この式を解析してASTを生成するには、ダイクストラの