3

条件文字列の多くの行を含むファイルがあり、そのファイルを読み取り、論理条件の文字列を実際のコードに変換する必要があります。いくつかのパラメーターがあり、条件の各行は、1 つまたは複数のパラメーターが指定された値を満たすか、または指定された値を含んでいるかどうかをチェックします。例えば:

$parameterA = "value_1" AND ($parameterB CONTAIN "%value_2%" OR $parameterC = "value_3")

「=」、「AND」、および「OR」は、「==」、「&&」、および「||」の意味を持ちます。「%」はワイルドカードです。

コードに変換すると、次のようになります。

if (obj.parameterA == "value_1" && (obj.parameterB.contains("value_2") || obj.parameterC == "value_3"))
     return true;
else return false;

ここで、「obj」は何らかのクラスのインスタンスです。

ここで他の投稿を検索しましたが、ANTLR が適しているようです。ただし、私はその経験がなく、Java で使用するのがどれほど難しいかわかりません。ANTLR のすべての詳細に飛び込む前に、他に良いアイデアがないかどうかを確認したいだけです。ご助力ありがとうございます!

4

2 に答える 2

0

非常に単純な言語(ブール式など)の場合、ANTLRのようなツールは機能しますが、実際にはやり過ぎです。パーサーは非常に簡単に手動でコーディングできます。再帰下降パーサーのハンドコーディングに関する私のSOの回答を参照してください。

于 2012-05-08T20:05:37.383 に答える
0

実際、既存のライブラリがこれを行うかどうかはわかりませんが、式を評価する古典的な方法は、2 つのステップで作成することです。

あなたが持っている式は中置表記であるため、それを接頭表記に変換する必要があります。これは、括弧を削除し、演算子をオペランドの前に配置するためです。

2 番目のステップでは、単純な再帰アルゴリズムを使用して式を評価します。このアルゴリズムには、変数を解決する責任もあります。

もう1つ、代入演算子に最大の優先度を与える必要があります。

式評価器のオープン ソース実装を作成しました。必要に応じて拡張できるかもしれません。

jDTO 式エバリュエーター ソース

お役に立てれば。

于 2012-05-08T19:50:17.583 に答える