文字列(おそらくstd::string
)が有効なC++式であるかどうかをテストする必要のあるプログラムをC++で作成しています。変数が宣言されていれば(bool variableDeclared(std::string identifier)
)、変数の型をチェックすることもできます(std::string variableType(std::string identifier)
)。 variableType
関数は、C++("bool"
、"double"
、"char"
など)で宣言される方法に基づいて文字列を返します。文字列が有効なC++(ish)式であるかどうかをテストする方法は?
この式は評価する必要はなく、有効かどうかをテストするだけです。関数は文字リテラル、文字列リテラル、数値リテラル、ブラケット、簡単な演算子をサポートする必要がある(+
、-
、*
、/
、!
(ロジックではない)、&&
、||
、>
、<
、==
)、およびタイプdouble
の変数、std::string
(関数呼び出しは不要)、bool
およびchar
。また、文字列連結をサポートする必要もありません。
希望の結果は、bool validExpression(std::string expression)
のような関数になります。また、操作を変更することもできます(たとえば、"=="
を"equal-to"
に変更することができます)。
どうすれば実装できますか?このようなことができるライブラリ、正規表現のステートメント、または単にif
ステートメントがたくさんある長い関数の問題ですか?
コンパイルしてください。それがコンパイルされたら、*多分*有効なコードです。この練習の目的は何ですか?あなたはスクリプト言語を書こうとしていますか?これは、長い、醜い道を行くことができますが、それはまた非常に興味深いです。コンパイルして任意のコードを実行することは、コードを提供する人々を絶対に信頼しない限り、非常に悪い考えです。 – tadman
もしあなたが冒険しているなら、[Ragel](http://www.colm.net/open-source/ragel/)のようなツールを使ってパーサを実装してみてください。 – tadman
Context Free Grammar [CFG]を構築してから、指定された文字列を[CFG]で生成できるかどうかを確認する必要があります。 – sameerkn