3

アプリケーションの場合、算術式と変数を使用して文字列を解析したいと考えています。次の文字列を想像してみてください。

((A + B) * C) / (D - (E * F))

したがって、ここにはプレースホルダーがあり、実際の整数/倍精度値はありません。最初のプレースホルダーを取得し、(データベースクエリなどを介して) 値をプレースホルダーに入れ、次のプレースホルダーに進むことができるライブラリを探しています。

したがって、私が本質的にやりたいことは、ユーザーが変数の実際の値を知らなくても、ドメイン言語で文字列を記述できるようにすることです。そのため、アプリケーションは何らかの「コンテキスト ロジック」に応じて数値を提供し、計算結果を出力します。

私はグーグルで検索しましたが、適切なライブラリが見つかりませんでした。ANTLR を見つけましたが、私のユースケースでは非常に「重い」と思います。助言がありますか?

4

2 に答える 2

2

ANTLR が少しやり過ぎであることは間違いありません。ただし、中置表記で算術式を解析することはそれほど難しくありません。以下を参照してください。

また、Groovy や JRuby などのスクリプト言語の使用を検討する必要があります。また、JDK 6 以降では組み込みの JavaScript サポートが提供されます。ここで私の答えを参照してください: Java でメタ言語を作成します

于 2011-10-19T21:18:56.117 に答える
0

やりたいことが単純な式だけで、それらの式の文法を前もって知っている場合は、ライブラリさえ必要ありません。これは純粋な Java で簡単にコーディングできます。

方法の詳細については、この回答を参照してください: Is there an alternative for flex/bison that is used on 8-bit embedded systems?

ユーザーが独自の式言語を定義している場合、それが常にいくつかのモナドまたはバイナリ演算子の形式であり、優先順位を指定できる場合、いくつかのレベルで演算子のリストを使用してパーサーをパラメーター化することにより、上記の答えを曲げることができます優先します。

言語がより洗練されている場合は、metacompilersを調査することをお勧めします。

于 2011-10-20T07:58:40.163 に答える