2012-03-08 5 views
1

エンドユーザー(機能担当者)がデータ変換を実行するために使用する一連のAPIを定義しました。例として、Name = "XyZ"という入力に対しては、nameのすべての値を大文字に変換するために、関数の人々は@Text.UpperCase(Name)のような変換規則を定義できます。それが動作する方法は、@の後に定義されたすべての単語がデータ型であり、.の後に定義されるすべての単語が、かっこと値のあとに続くメソッドであるということです。これは私たちが計画したものですが、私は次のことを理解しようとしています:実行時にカスタムメソッドを実行/解析することに関する提案 - Java

1本当にそのような入力を解析するのに使われる文法が必要ですか?
2>@Text.UpperCase(@Text.trim("XyZ "))のようなネストされたコールをどのように整理できますか?

+0

文法は固定ですか?そうでない場合は、Javaで利用可能な多くのスクリプト言語の1つを見てください。 Expression LanguageまたはJavaScript(Mozilla Rhino)を使用して目標を達成することができます – Royce

+0

はい、文法は修正されています。 –

+0

JFlexはオプションです:http://jflex.de/manual.html#SECTION00040000000000000000 – Royce

答えて

1

ユーザーが入力できるようにするために、文法を定義する必要があります。

文法が単純な場合(たとえば、ユーザーが名前を付けることができるのは、名前付き変数を使用して実際に関数呼び出しを行った場合など)、パーサジェネレータは必要ありません。この場合、随時解析するだけで十分です。それはあなたの単純な例のために十分です。

あなたの文法は控えめな複雑さ(例えば、ネストされた呼び出しを)持っている場合は、you can code a recursive descent parser pretty easily that will do the job.

あなたの文法は、(ユーザーが確実に、より多くの機能が要求されます)複雑になる場合は、パーサジェネレータをお勧めしますが。

あなたが指定した要件を満たしていれば、パーサージェネレータを受け入れる文法を書いた後、再帰的降下バージョンを作成します。それはまた、ユーザーマニュアルの中にある便利なドキュメントになります。

関連する問題