Wudy 发表于 2012-5-20 09:37:23

【C编译器】新进展

本帖最后由 Wudy 于 2012-5-20 10:31 编辑

进展有点慢。。


现已支持:
编译成字节码再虚拟机执行,一位数组,一级指针,浮点数,字符串常量,递归,
3个库函数:input(),output(),puts()
more...

下一步的工作:
多维数组,强大的库。

短时间内不会支持的:
++,--操作符,多级指针,函数指针,其他高级的内容


放几个已经完美测试的代码(windows平台)

1.八皇后问题int C;

int tot = 0;

void search( int cur )
{
      int i, j;
      
      if( cur == 8 )
                tot += 1;
      else
      {
                for(i = 0; i < 8; i += 1 )
                {
                        int ok = 1;

                        C = i;
                        for( j = 0; j < cur; j += 1 )
                              if( C == C || cur - C == j - C || cur + C
                                        == j + C )
                                        {
                                                ok = 0;
                                                break;
                                        }
                        if( ok )
                              search( cur + 1 );                                                
                }
      }
}

void main()
{
      search( 0 );
      output( tot );
}2.高精度阶乘int f;

void main()
{
      int i, j, n;
      
      n = input();
      f = 1;
      for( i = 2; i <= n; i += 1 )
      {
                int c = 0;
                for( j = 0; j < 100; j += 1 )
                {
                        int s = f * i + c;
                        f = s%10;
                        c = s / 10;
                }
      }
      
      for( j = 100 - 1; j >= 0 && f == 0; j -= 1 )
                ;
      
      for( i = j; i >= 0; i -= 1 )
                output( f );

}3.合并排序 void merge_sort( int* A, int x, int y, int* T )
{
      if( y-x > 1)
      {
                int m = x + (y-x)/2;
                int p = x, q = m, i = x;

                merge_sort( A, x, m, T );
                merge_sort( A, m, y, T );
                while( p < m || q < y )
                {
                        if( q >= y || (p < m && A <= A) )
                        {                              
                              T = A;
                              i += 1; p += 1;
                        }
                        else
                        {
                              T = A;
                              i += 1; q += 1;
                        }
                }
                for( i = x; i < y; i += 1 )
                        A = T;
      }
}


void main()
{
      int a;
      int temp;
      int i;

      for( i = 0; i < 5; i += 1 )
                a = input();

      merge_sort( a, 0, 5, temp );

      for( i = 0; i < 5; i += 1 )
                output( a );
}4.hello worldvoid main()
{
      puts( "Hello World!" );
}要等更完整后再发布,还是先发布一个尝鲜版?

NAT 发表于 2012-5-20 10:38:47

先发布一个尝鲜版

NAT 发表于 2012-5-20 10:44:15

i += 1是i++?
好怪...
Puts?
Printf会好点?cout也不错.

noivan 发表于 2012-5-20 10:57:58

进展有点慢。。


现已支持:
编译成字节码再虚拟机执行,一位数组,一级指针,浮点数,字符串常量,递归,
3个库函数:input(),output(),puts()
more...

下一步的工作:
多维数组,强大的库。

...
Wudy 发表于 2012-5-20 09:37 http://www.cncalc.org/images/common/back.giffor 9860?

wtof1996 发表于 2012-5-20 11:03:11

既然可以用递归,那么快排试过没有?

NAT 发表于 2012-5-20 11:07:08

放几个已经完美测试的代码(windows平台)Wudy 发表于 2012-5-20 09:37 AM http://www.cncalc.org/images/common/back.gif
难道...

wtof1996 发表于 2012-5-20 11:07:13

饿,看到合并了……
---------------------------------
结构体能不能实现呢?
---------------------------------
另外,位运算能不能用了?

Wudy 发表于 2012-5-20 11:50:59

结构体太难,应该不会有了。
位运算有时间就加。
printf可变参数比较难解决。。

Wudy 发表于 2012-5-25 22:18:20

预计明天可以发布尝鲜版

NAT 发表于 2012-5-26 14:31:51

预计明天可以发布尝鲜版
Wudy 发表于 2012-5-25 10:18 PM http://www.cncalc.org/images/common/back.gif
Really?那就是今天么?

Wudy 发表于 2012-5-26 19:58:11

10# 9750GII

出了点问题,要跳票了…

白菜白 发表于 2013-3-28 13:51:33

跳到啥时候?

DAS 发表于 2013-3-30 10:16:41

9750GII 发表于 2012-5-20 10:44
i += 1是i++?
好怪...
Puts?

cout是C++的,还是习惯printf。i++的字节占用更小,i+=的功能更多[废话]
页: [1]
查看完整版本: 【C编译器】新进展