Java言語標準仕様に従って、Javaコンパイラが解析するのと同じ方法で式を解析する必要があります。
独自のパーサをゼロから構築することはお勧めできません。 Java構文は過去10年間で複雑になってきました。既存のJavaパーサを見つけて再利用して、ホイールを間違って再作成する必要はありません。
JavaCCとANTLRはどちらもJava形式で使用でき、Java文法が定義されています。私はそれらをプライム候補とみなすことをお勧めします。複雑なのは、これらのパーサーが式ではなく完全なプログラムを解析することです。式をゴールルールにするように文法を修正し、生成する可能性のある文法の競合を修正することで修正できます。私はあまり期待しないだろう。
もっと複雑な問題:構文が有効であるという理由だけで、式が有効であるとは限りません。私は、Javaの構文が受け入れることをかなり確信している:
"abc" * 17.2
として有効構文。
あなたは、式の妥当性を確認したい場合は、型チェック式は、背景タイプ情報を提供するために評価されるコンテキストを使用して、にそれをする必要があります。それ以外の場合は1が有効なものとしてこれを受け入れます:
s * d // expression that parses correctly, but isn't valid
を背景知識が、このとき:
Object s;
char d;
がフルタイプのチェックを行うことは非常に、非常に困難です。実際の問題として、型チェックを解析して実行する完全なJavaコンパイラフロントエンドが必要です。 パーサージェネレーター(ANTLR、JavaCCなど)は、これを行うのに役立つゼロを提供します。
Javaコンパイラを使用するか、Javaフロントエンドを検索します。いくつかあります。 [完全開示:私の会社はこれを行うことができる会社を提供する]。
一般的なケースでは、Javaパーサーを構築しようとしているようです。 –
クラスにコードを追加してファイルに書き込んでコンパイルすることができます.Java 9にはREPLがありますので、簡単になると思います。 –
それは助けることができるhttp://javaparser.org/ –