2011-10-19 12 views
3

アプリケーションでは、算術式と変数でStringを解析したいと考えています。ただ、この文字列を想像:プレースホルダを使用した単純なJava再帰的降下ライブラリの解析

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

だから私はここにプレースホルダと実際の整数/ double型の値を持っています。私は、最初のプレースホルダを取得し、プレースホルダに(データベースクエリなどを介して)値を入れ、次のプレースホルダを続けるライブラリを探しています。

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

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

+1

はい、軽量ですぐに使えるソリューションがあります:http://jparsec.codehaus.org/(ただし、独自の解析コンビネータをJavaで実装するのは簡単です)。 –

答えて

2

ANTLRはちょっとした過剰です。しかし、中置記法で算術式を解析することは難しいことではありません、以下を参照してください

また、あなたがGroovyのか、JRubyのようないくつかのスクリプト言語を使用して検討すべきです。また、JDK 6以降では、JavaScriptサポートが組み込まれています。私の答えはCreating meta language with Javaです。

+0

javascriptのアプローチを使用して要件を正常に実装しました。ありがとう! –

0

あなたがやってみたいのは簡単な表現で、それらの式の文法をあらかじめ知っていれば、ライブラリも必要ありません。純粋なJavaでこれを簡単にコード化することができます。

の詳細なバージョンのこの回答を参照してください方法: Is there an alternative for flex/bison that is usable on 8-bit embedded systems?

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

言語がさらに洗練されている場合は、metacompilersを調べるとよいでしょう。

関連する問題