2016-10-27 9 views
2

ネット上の利用可能なパーサーを少し見ていますが、私のカスタム表現に最も適しているものは本当に分かりません。 (ANTLRは私のニーズのためにヘビー級には少しのようだが、それだけで最初の印象です)シンプルなカスタム式パーサー

私はそれがうまく形成されていますことを検証する必要があり、次の式があります。

IF(VAR1> VAR2を、15 ; IF(var3 < = var4; 1; 2)) この式は、条件が真の場合は となり、結果が15の場合はその他の式になります。

私はこれがうまく形成されていることを検証するためにのみ必要はありません

(など、ネストされたIFを、第一および第二の分岐はIFキーワードが正しく使用されていることを、常に存在すること、余分な括弧...)

+0

何が問題なのですか? –

+0

SpringのSpELパーサーを使用することができます(**の場合は**の代わりに**演算子を使用する必要があります)http://docs.spring.io/spring/docs/current/spring-framework-reference/html/ expressions.html。これは** ExpressionParser parser = new SpelExpressionParser()と同じくらい簡単です。式exp = parser.parseExpression( "1 + 2 *(2 + 7 *(1 + 5))"); System.out.println(exp.getValue()); **は変数やその他の機能をサポートしています。 –

答えて

1

まず、文法を書いてください。そうでなければ、合法であるかどうかは不明です。 (あなたが書いたことは正確ではありません;例えば、リレーショナルの後ろの数字をIFのelse部分として持つことが許されていますか?)文法はこれを正確にします。

第2に、文法が唯一の式を受け入れるならば、手書きの再帰的降下文法(see my SO answer on how to do this)で簡単にそれをコーディングできます。そのようなパーサはあなたが望むすべての健全性チェックを行います。

非常に複雑な言語を解析する場合は、JavaCCまたはANTLRを選択することをお勧めします。

関連する問題