C-compile-system

所属分类:编译器/解释器
开发工具:Visual C++
文件大小:40KB
下载次数:19
上传日期:2011-08-28 21:12:34
上 传 者liyanggg
说明:  这是编译原理课程的大作业,实现了简单的C语言向x86汇编语言的转换。使用LL(1)文法。
(This is a great compiler theory course work to achieve a simple C language to convert x86 assembly language. Using LL (1) grammar.)

文件列表:
新的编译系统\ASM_anlylize.cpp (29899, 2011-07-01)
新的编译系统\Defines.h (4582, 2011-06-20)
新的编译系统\GramaAnalysis.cpp (5839, 2011-06-30)
新的编译系统\LexicalAnalysis.cpp (1762, 2011-06-20)
新的编译系统\resource.h (999, 2011-06-08)
新的编译系统\SMALL.ICO (318, 2011-06-20)
新的编译系统\StdAfx.cpp (299, 2011-06-06)
新的编译系统\StdAfx.h (936, 2011-06-06)
新的编译系统\新的编译系统.aps (5336, 2011-06-20)
新的编译系统\新的编译系统.cpp (9097, 2011-06-20)
新的编译系统\新的编译系统.dsp (4915, 2011-06-20)
新的编译系统\新的编译系统.dsw (549, 2011-06-06)
新的编译系统\新的编译系统.h (308, 2011-06-06)
新的编译系统\新的编译系统.ICO (1078, 2011-06-20)
新的编译系统\新的编译系统.ncb (91136, 2011-07-01)
新的编译系统\新的编译系统.opt (51712, 2011-07-01)
新的编译系统\新的编译系统.plg (934, 2011-07-01)
新的编译系统\新的编译系统.rc (3536, 2011-06-20)
新的编译系统\说明.cpp (1499, 2011-06-28)
新的编译系统 (0, 2011-08-28)

======================================================================== WIN32 APPLICATION : 新的编译系统 ======================================================================== int main(int p) { int a,b; a=b+p; }; int main(int a,int b){int d[16],e,f;d[a]=b+10; return 5;}; main(10,20); int fun(){ return 10 ;}; int a; a=fun(); //数组测试: int a,b[24]; b[20]=b[10+a]; a=b[a]; b[a]=a; 表达式测试 int a; a=44+(55+66)*77; 函数定义测试: int fun(int p,bool pb) { int a,b,c,d; a=b+c+d; return a; }; 综合测试: int ga,gb,gc,gd; gd=main(ga,gb,gc); int main(int pa,char pb,int pc) { int a,b,c,d; int arry[100],i; i=0; while(i<100)a[i]=0; if(ga>a){a=1024+4028*pb;a++;} else b=888-gb*pc; return gd; }; 说明: 文法支持:1)函数定义和调用(机制支持递归调用)2)表达式运算 3)结构体定义和使用 4)多维数组定义和使用 5)if_else控制(支持嵌套) 6)for(;;);和while控制(支持嵌套) 7)复合布尔表达式 汇编支持:1)变量方面:支持变量作用域,有三种类型变量(4字节和1字节和void),不支持结构体使用,支持结构体定义,使用不写了; 2)算术表达式方面:支持单寄存器表达式运算(如a+b*c),支持优先级和小括号,不支持形如(a+b)*(c+d)的多寄存器表达式 求值,支持后加加运算,如a++;a--;注意:算术表达式的优先级是通过从新排列表达式顺序实现的,代码羞涩难懂, 不要写类似(5)+6*(7)这样的表达式,她不会接受的...... 3)布尔表达式方面:支持>,<,>=,<=,==,!=的运算,不支持符合运算! 4)指针数组方面:最初文法未定义指针,于是汇编不支持指针;支持一维数组的定义和使用,但不支持一维以上;数组下标求值 不支持优先级! 5)执行顺序控制方面:支持if_else; if; while 三种语句;并且都支持嵌套; 6)函数方面:支持函数定义和调用。函数定义最后要有‘;’!使用堆栈传递参数,由被调用者释放堆栈; 寄存器说明:EAX用于表达式和函数返回值;EBX用于数组下标求值;ESI是堆栈顶,堆栈向低地址增长;EBP是基址指针;

近期下载者

相关文件


收藏者