2009-04-23 26 views
1

を解析:例えば、私は文字列から動的な機能を解析しようとしている動的な関数形式の文字列

char* func = "app.exe /path:\"@FileExists('filepath', @FileDelete('filepath'), @MsgBox('file not found','error',1))\"; 

は私がこれをどのように行うことができます

@FileExists('filepath', @FileDelete('filepath'), @MsgBox('file not found','error',1)) 

を解析したいですか?

+0

「解析する」とはどういう意味ですか?これが終わったときに何をしたいのですか?解析木ですか?トークンのリスト?これに基づいて何かを実行したいですか? –

+0

はい、テキストから関数を抽出して実行したい – Moudey

+0

正確に何をしたいのかを具体的に説明する必要があります。それらの@関数はWindowsのスクリプト関数のように見えます。この場合、これはWindows固有の質問であり、C++の質問ではありません。 –

答えて

4

C++には動的関数の概念がありません。文字列を受け取り、C++コードとして実行する関数を探しているなら、あなたは不運です。

+0

私は彼がそのような機能 –

+3

ない仕事をしたいかもしれないと思います初心者、私はベンチャー企業 –

+2

このような関数が1つあります。これはsystem( "g ++ ...")と呼ばれ、 – Eclipse

3

私はあなたが文字列内のコードを実行しようとしていると推測しています。 C++では、プログラムがコンパイルされると、関数や変数の名前のレコードはありません。すべてが単なるアドレスです。

文字列のマップを関数に設定することは可能です。関数/名前と引数のツリーを構築し、関数を手動で呼び出す必要があります。基本的には、C++のサブセット用のインタプリタを、あらかじめ定義された一連の使用可能な関数で記述する必要があります。これは絶対に初心者の仕事ではありませんが、あなたが本当にしたい場合は、Recursive-Descent parsingを見てください。通訳を書くのがはるかに簡単な方法です。あなたのニーズがそれを上回っているなら、より強力なパーサーの一部を見てみましょう。ANTLRまたはflex/bison

もっと動的なスクリプト言語をC++に埋め込むことは可能です。実際には、ほとんどのスクリプト言語にはある種のCインタフェースがあり、C言語で行うことができるものはC++で行うことができます。 VBScriptの場合はBoost.Pythonthis exampleなどをご覧ください。

4

Joshがすでに述べたように、ダイナミックスクリプト言語を使用することをお勧めします。 Luaは簡単に埋め込み可能で、小さく、MITライセンスの下で利用可能です。

関連する問題