ステートメントのセットを変数に取り込むプログラムが1つあります。そのコードのブロック(文字列として変数に与えられる)を、コンパイルと実行のために現在の実行コードに動的に配置するにはどうすればよいですか。私はこの解決策を熱心に待っています。この機能を備えたプログラミング言語..はいの場合は、この質問のコードを貼り付けてください
3 に答える
Perlはこれを簡単にします。
Perlの場合:
eval q{ print "Hello world!\n" };
また
$code = ' print "Hello world!\n"; ';
eval $code;
evalを参照してください。
コードの取得元に注意する必要があることに注意してください。あなたはあなたの言語の全力をあなたにインプットを提供する人にさらしているのです。それが安全なソースから来ていることを確認してください。 「文字列評価」は、それが呼ばれるように、それをサポートするすべての言語でのリスクの高い動作です。 たとえば、Webユーザーからの入力を受け入れ、それをサーバー上でコードとして実行することは、災害を要求するだけです。
Cに関して:Cはコンパイルされた言語であり、コンパイラーは実行時に使用できません。一方、PerlインタープリターをCプログラムに埋め込むことを妨げるものは何もありません。これにより、コンパイルされたCアプリケーション内から実行時のコンパイルとPerlコードの実行が可能になります。ちなみに、C++は同じボートに乗っています。これはコンパイルされた言語であり、コンパイラはランタイム環境のコンポーネントではありません。
Javaに関しては、この記事があります:Java6.0コンパイラAPI。
あなたが「どんな言語でも」と言ったので、私はあなたのタグを無視します。
Pythonではそれは些細なことです:
code = "print \"hello world\""
exec code
これにより、「helloworld」が出力されます。
コンパイラは実行時に存在しないため、Cにはそのような機能はありません。
あなたはjavaScript関数を探していますeval()