*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();

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS