Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
rvtlc : rvtlコンパイラ (i386)
[go: Go Back, main page]

[HOME] [rvtlの紹介] [玄箱用rvtl] [LinuxZaurus用rvtl] [rvtlのコマンド一覧] [VTL系言語の歴史]

rvtlc : rvtlコンパイラ (i386)

2006/05/17 Jun Mizutani


rvtlcについて

rvtlc は自己記述可能なrvtlコンパイラです。rvtlc自身のソース(rvtlc.vtl)をrvtlcでコンパイルできます。


Linuxの実行ファイルを直接出力します。したがってリンカ(ld)もアセンブラも不要です。 出力された実行ファイルはそのファイル単独で動作し、libc等の共有ライブラリは不要です。


i386専用です。PowerPCやARMが動作する Linux 用のrvtlでは動作(クロスコンパイル)できません。

ダウンロード

http://www.nk.rim.or.jp/~jun/rvtlc/rvtlc_20060516.tar.gz (90KB)

ファイル

README.TXT このファイル
rvtlc.vtl rvtl版コンパイラ
rvtlc コンパイル済みコンパイラ
rt.bin ランタイムライブラリ
rtl_source ランタイムライブラリのソース
COPYING GNU General Pulic Licence
gpl.text GPLの日本語訳

コンパイラの使用方法

例えば mycode.vtl というrvtlのソースプログラムをコンパイルするには rt.bin と rvtlc のあるディレクトリに mycode.vtlを置いて、以下のように実行します。

 ./rvtlc mycode.vtl

または、rvtl-3.03 が使用できる環境では以下のようにコンパイラのソースを使ってコンパイルできます。

 rvtl rvtlc.vtl - mycode.vtl

rvtlc 自身は次のように作成しています。

 rvtl rvtlc.vtl - rvtlc.vtl
 mv rvtlc.elf rvtlc

カレントディレクトリに mycode.elf というファイルができます。これは実行可能なファイルになっていて、./mycode.elf として実行できます。


mycode.vtl を次の内容のファイルとします。

100 "My first program." /
110 #=-1

mycode.vtl をコンパイルします。「jm:~/rvtlc$ 」はプロンプトなので入力する必要はありません。

jm:~/rvtlc$ ./rvtlc mycode.vtl

read 2 lines

file : mycode.elf 5620 bytes
 header size      128
 library size     5284
 code size        98
 code starts from 0x080494A4
 code ends at     0x08049505
 Source Lines     2
 Source Labels    0
 File Name        mycode.elf
 File Size        5620
 heap size        free : 429996 / 781312 bytes
 To check code, run : objdump -d --start-address=0x080494A4 mycode.elf
  time:0.000514sec

5620バイトの実行ファイルが 0.0005秒で作成できました。この mycode.elf 実行して確認します。

jm:~/rvtlc$ ./mycode.elf
My first program.

この mycode.elf は Linux が動作する環境ならばどのPCでも実行できます。

objdump -d --start-address=0x080494A4 mycode.elf 

のように実行するとコンパイルされたファイルを逆アセンブルできます。

rvtlcの出力ELFバイナリのメモリマップ

        :                                       :
        +---------------------------------------+ 0x08048000
  .text | ELF Header領域                        |
        +---------------------------------------+ 0x08048080
        | ランタイムライブラリ領域              |
        +---------------------------------------+
        | コード領域 最大350KB                  |
        |                                       |
        +---------------------------------------+
        :                                       :
        +=======================================+ 0x080A0000
  .bss  | ランタイムライブラリ作業領域   16KB   |
        +---------------------------------------+ 0x080A4000
        | 変数領域          128ワード     1KB   |
        +---------------------------------------+
        | 変数スタック     1024ワード     4KB   |
        +---------------------------------------+ &
        | ヒープ領域  256KB 実行時に拡張可能    |
        :                                       :
        |                                       |
        +---------------------------------------+ *
        :                                       :
        | スタック領域                          |
        +---------------------------------------+

rvtlcの文法とrvtl-3.03との違い

rvtl-3.03 と同じです。rvtlのコマンドのうちインタプリタ専用のコマンド(編集コマンド等)と組み込みコマンドのうちシェルとして使用するもの |cd,|ls,|md,|mv,|rd,|cw,|rm,|mo,|um,|sy,|cr,|ex,|pv,|so,|sf はサポートしていません。


|ca, |cm, |zz とフレームバッファ関連コマンドは使用できます。


for文の終了条件と制御変数の値は終了時に一致する必要があります。増分が1より大きい場合には注意してください。


文法の詳細は http://www.nk.ri.or.jp/~jun/rvtl/rvtl.htmlを参照して下さい。

ライセンス

このソフトはフリーソフトウェアです. GNU General Pulic Licenceにしたがって自由に使用,配布,改変して頂いてかまいません。GNU General Pulic Licence の詳細はCOPYINGを参照して下さい.GNU General Pulic Licence の日本語訳は gpl.text です.著作権は私(水谷 純, mizutani.jun@nifty.ne.jp)が保有しています。本ソフトウェアによって生じた損害について著作者は責任を負いません。また、著作者はバージョンアップの義務を負いません。


ご意見・ご感想は,こちら まで.