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是基址指针;
近期下载者:
相关文件:
收藏者: