5.1 Example overview

Vmgen を使用する同一の例として、 vmgen-exvmgen-ex2 の 2 つのバージョンがあります(例として Gforth もありますが、 追加の(文書化されていない)機能が使用されており、 他のいくつかの点でも異なります)。 この例では、 JavaVM のような小さな仮想マシンを備えた小さな Modula-2 のような言語である「mini」言語を実装しています。

2つの例の違いは、 vmgen-ex は多くのキャスト(cast)を使用するのに対し、 vmgen-ex2 はほとんどのキャストを回避し、 代わりに共用体(unions)を使用することです。 このマニュアルの残りの部分では、 通常、 vmgen-ex 内のファイルについてのみ言及します。 共用体(union)を使用したい場合は、 vmgen-ex2 内の同等のファイルを使用してください。

各例で提供されるファイルは以下のとおりです:

Makefile
README
disasm.c           wrapper file
engine.c           wrapper file
peephole.c         wrapper file
profile.c          wrapper file
mini-inst.vmg      simple VM instructions
mini-super.vmg     superinstructions (empty at first)
mini.h             common declarations
mini.l             scanner
mini.y             front end (parser, VM code generator)
support.c          main() and other support functions
fib.mini           example mini program
simple.mini        example mini program
test.mini          example mini program (tests everything)
test.out           test.mini output
stat.awk           プロファイル情報を集約するためのスクリプト
peephole-blacklist スーパー命令で許可されない命令のリスト
seq2rule.awk       スーパー命令を生成するためのスクリプト

あなた独自のインタープリターを作る場合、 通常、 以下のファイル群はコピーして使い、 変更することはほとんどないでしょう:

disasm.c           wrapper file
engine.c           wrapper file
peephole.c         wrapper file
profile.c          wrapper file
stat.awk           プロファイル情報を集約するためのスクリプト
seq2rule.awk       スーパー命令を生成するためのスクリプト

そして、 通常、 あなたは、 以下のファイル群を大幅に変更するか、 置き換える事になります:

Makefile
mini-inst.vmg      simple VM instructions
mini.h             common declarations
mini.l             scanner
mini.y             front end (parser, VM code generator)
support.c          main() and other support functions
peephole-blacklist スーパー命令で許可されない命令のリスト

example のディレクトリに cd してから make と入力すると、 example をビルドできます。 make check で動作することを確認できます。 以下のようにして mini 言語のプログラムを実行できます:

./mini fib.mini

オプションについて詳しくは、 ./mini -h と入力してください。