CEX2CPP

えーと、C式をC言語にトランスレートするプログラムを作ってみました。
だいぶ、手抜きなんですが、、、。
javascriptへのトランスレータのコピペ&一部手直しになっています。

import stdio.h

a:int(b:int, c:int) {
	return b+c;
}

main:int() {
	printf("hello world %d\n", a(1,2));
	b:int = 10;
	if(b == 10) {
		printf("if 10\n");
	} else {
		printf("not 10\n");
	}
	switch(b) {
	case(1){
		printf("1\n");
		break;
	}
	case(10){
		printf("10\n");
	}
	default{printf("default\n");}
	}
	i:int;
	for(i=0;i<3;i++) {
		printf("for %d\n", i);
	}
	i = 0;
	while(i<3) {
		printf("while %d\n", i);
		i++;
	}
	i = 0;
	do {
		printf("do %d\n", i);
		i++;
	} while(i < 3);
	return 0;
}

このプログラムを、以下のc言語に変換します。

  #include <stdio.h>
  int  a ( int  b , int  c) { return b + c ;}  int  main () {printf ( "hello world %d\n" , a ( 1 , 2)) ;  int  b = 10 ;  if ( b == 10) {printf ("if 10\n") ;} else {printf ("not 10\n") ;}  switch (b) {case  1 : {printf ("1\n") ; break ;} case  10 : {printf ("10\n") ;} default: {printf ("default\n") ;}}  int  i ; for ( i = 0 ;  i < 3 ;  ++ i) {printf ( "for %d\n" , i) ;}  i = 0 ; while ( i < 3) {printf ( "while %d\n" , i) ;  ++ i ;}  i = 0 ;  do {printf ( "do %d\n" , i) ;  ++ i ;}  while ( i < 3) ;  return 0 ;}

バグだらけだと思うのですが、結構、あっという間に作れました。
マッチングとかつかわないで変換してるので、マッチングつかったりするともっと
楽に出来るかと思います。

// [disable,[import,[.,stdio,h]],[:,a,[int,[paren,[,,[:,b,int],[:,c,int]]],[bloc
k,[return,[+,b,c]],;]]],[:,main,[int,[paren],[block,[printf,[paren,[,,"hello wor
ld %d\n",[a,[paren,[,,1,2]]]]]],;,[=,[:,b,int],10],;,[else,[if,[paren,[==,b,10]]
,[block,[printf,[paren,"if 10\n"]],;]],[[block,[printf,[paren,"not 10\n"]],;]]],
[switch,[paren,b],[block,[case,[paren,1],[block,[printf,[paren,"1\n"]],;,break,;
]],[case,[paren,10],[block,[printf,[paren,"10\n"]],;]],[default,[block,[printf,[
paren,"default\n"]],;]]]],[:,i,int],;,[for,[paren,[=,i,0],;,[<,i,3],;,[++,i]],[b
lock,[printf,[paren,[,,"for %d\n",i]]],;]],[=,i,0],;,[while,[paren,[<,i,3]],[blo
ck,[printf,[paren,[,,"while %d\n",i]]],;,[++,i],;]],[=,i,0],;,[do,[[block,[print
f,[paren,[,,"do %d\n",i]]],;,[++,i],;]]],[while,[paren,[<,i,3]]],;,[return,0],;]
]]]

内部的には、ちゃんと、一度こんなツリーに構文解析されてます。

ダウンロードはこちらから。

http://sakurai.s59.xrea.com/cxp/cex2cpp.js

600行くらいです。


実行方法は、

cscript //nologo cex2cpp.js< test.c2>test.cpp

のような感じです。

話を聞いてくれたid:moceanさんに感謝です。


moceanさんがいなかったら、完成出来なかったと思うよ。