*ELCHNOS -https://sourceforge.jp/projects/chnosproject/scm/git/AI004/ もともとはCHNOSProjectのために構想していた(Elements Language for CHNOSProjectの略)。&br; その言語仕様を利用して、OSECPUのためのコンパイラならすぐに作れそうなので、作ってみた、C言語風の言語。 *現在の状況 **できること -コンパイラ(JavaScriptで書かれている)のプロトタイプはできた。 -app0023相当のコードをコンパイル、実行できる。 -定数式の計算 -インライン関数展開 -変数のレジスタ割り付け -バックエンドバイナリを生成し、保存できる。 **できないこと -文法上のいろいろ(まだ全然完成していない) -レジスタに割り付けられない変数の処理(spill処理) -レジスタ退避を伴う関数呼び出し -ソースファイル分割 -プリプロセッサ(#define等) -文字列処理 *どんな言語? -ASKAよりもうすこしC言語っぽい…と思う。 -ちなみに一行目のUUIDは、コンパイラを起動させるためのコードなので必要だったりする -2013-10-25現在、まだ演算子は以下のソースに出ている分しか実装されていない。 #17ddde48-7d4c-498f-98d8-3e73f8845028 unsigned char table[32] = { 196, 100, 187, 61, 164, 29, 129, 9, 90, 5, 53, 17, 23, 44, 7, 81, 7, 119, 23, 156, 53, 183, 90, 195, 129, 191, 164, 171, 187, 139, 196, 100, }; procedure inline drawLine(int mode, x0, y0, x1, y1, col){ @asm OSECPU REMARK 05 0100000003; R30 = 0xff45; R31 = mode; R32 = x0; R33 = y0; R34 = x1; R35 = y1; R36 = col; CALL P28; REMARK 01 00; @end } procedure main() { int x0, y0, x1, y1, col, i, j; unsigned char *p, *q; p = table; for (i = 0; i != 15; i++) { x0 = *p; p++; y0 = *p; p++; q = table; for (j = -8; j != 8; j++) { x1 = *q; q++; y1 = *q; q++; col = i - j; if (col <= 0){ col = 1 - col; } if (col <= 7) { drawLine(1 + 4, x0, y0, x1, y1, col); } } } } *コンパイルのしかた HTML5, FileAPI対応のブラウザを利用する必要があります。 **ローカルでコンパイル +リンク先からAI004のファイルを一通り落とす。 +index.htmlを起動 +下の方のInputのボックス内に、ソースファイルをドラッグ&ドロップする。 +エラーなく終了した場合は、ダウンロードリンクがDownloadsに表示されるので、そのリンクを右クリックして、名前(xxx.ose)をつけて保存する。 +お好きな実行環境で実行する *コメント、不具合報告などがあればどうぞ… -hikarupspさんすごい! -- ''K'' SIZE(10){2013-10-25 (金) 22:06:59} #comment();