2

私はXNAでゲームを作成していて、独自のスクリプト言語を作成することを考えていました(非常に単純です)。これを実現するためのより良い方法があることは知っていますが(そして私は車輪の再発明を行っています)、生産的で迅速な学習体験以上のものを望んでいます。

実行時にコードに直面した場合、私が理解していることから、通常のアプローチは、マシンコードやバイトコードなど、実際に実行可能なものに解析してから実行することです。しかし、たとえば、Chromeが最初に登場したとき、JavaScriptをマシンコードにコンパイルするため、JavaScriptエンジンは高速であると彼らは言いました。これは、他のエンジンがマシンコードにコンパイルされていなかったことを意味します。

低レベルにコンパイルしたくないので、低レベルにコンパイルせずにコードを解析して実行するための既知の最新の手法はありますか?おそらく、コードをある種のツリーに解析し、ツリーを分岐し、各シンボルを比較して、そのシンボルを処理する関数を呼び出すようなものですか?(暗闇の中での野生の推測と刺し傷)

4

3 に答える 3

2

私は個人的に、独自のパーサー(入力をトークンに変換する)またはレクサー(入力トークンの言語文法をチェックする)をロールしません。構文解析/字句解析のためのANTLRを見てください-それは素晴らしいフレームワークであり、あなたがそれの内臓を掘り下げたいのであれば完全なソースコードを持っています。

解析したコードを実行するために、単純な仮想マシンを実行するか、仮想マシンのバイトコード形式を標準化してJITing(スクリプトでコンパイルされたバイトコードをアセンブリに変換します)。

ネイティブマシンコードの実行など、マシンのより高度なオプションを思いとどまらせることはありませんが、これは非常に専門的な領域であり、非常に複雑で高速になることを忘れないでください。

アールズは、私の返事は「自分でこれをやる気にしないでください」という意味のように見えるかもしれないと指摘しました。私の投稿を読み直すと、少しそのように聞こえます。ANTLRとLLVMについて言及した理由は、どちらにも大量のソースコードとチュートリアルがあるため、これは優れたリファレンスソースだと思います。それをベースにして遊んでください

于 2010-03-10T23:53:02.767 に答える
0

言語を構築するためにこのフレームワークを試すことができます(XNAでうまく機能します): http ://www.meta-alternative.net/mbase.html

いくつかのチュートリアルがあります: http ://www.meta-alternative.net/calc.pdf

http://www.meta-alternative.net/pfront.pdf

于 2010-03-16T09:21:06.960 に答える
0

Pythonはスクリプト言語として優れています。C APIのC#バインディングを作成し、それを使用することをお勧めします。Pythonの埋め込みは簡単です。アプリケーションは、Pythonインタープリターがアクセスできるモジュール内の関数、タイプ/クラス、および変数を定義できます。アプリケーションは、Pythonスクリプトで関数を呼び出して、結果を返すこともできます。これらの2つの機能を組み合わせると、双方向の通信方式が実現します。

基本的に、Pythonの構文とセマンティクスは無料で入手できます。実装する必要があるのは、アプリケーションがPythonに公開するAPIです。例としては、ゲームロジック関数やレンダリング関数へのアクセスがあります。次に、Pythonスクリプトはこれらを呼び出す関数を定義し、ホストアプリケーションはPython関数(パラメーターを使用)を呼び出して作業を実行します。

編集:IronPythonはさらに多くの作業を節約できるようです。これはCPythonのC#実装であり、独自の埋め込みAPIがあります:http ://www.ironpython.net/

于 2010-03-16T09:39:48.663 に答える