编译原理课程设计报告--C语言子集编译器设计

编译原理课程设计报告--C语言子集编译器设计

ID:35618045

大小:968.64 KB

页数:22页

时间:2019-04-02

编译原理课程设计报告--C语言子集编译器设计_第1页
编译原理课程设计报告--C语言子集编译器设计_第2页
编译原理课程设计报告--C语言子集编译器设计_第3页
编译原理课程设计报告--C语言子集编译器设计_第4页
编译原理课程设计报告--C语言子集编译器设计_第5页
资源描述:

《编译原理课程设计报告--C语言子集编译器设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、编译原理课程设计报告题目:C语言子集编译器设计学号:姓名:班级:教师得分:日期:广西大学计算机科学与电子信息学院1、设计任务1.1编译的语言本编译器编译的语言为C语言子集,具体如下:算术运算符:+-*/关系运算:><>=<=!====逻辑运算&&

2、

3、!赋值运算=数字0123456789字符a…..zA…..Z标示符的命名规则:由字母和下划线组成,打头的只能是字母,区分大小写,不能和关键字重复。注释:单行注释//多行注释/**/数据类型有整型int,字符型char符合数据类型有数组inta[6]程序由一个主函数组成<主函数>→voidmain(){<复合语句>}<复合语句>→

4、<常量说明部分><变量定义部分><语句序列><常量定义>→int<标示符>=<整数>{,int<标示符>=<整数>}

5、char<标示符>=<字符>{,char<标示符>=<字符>}

6、变量定义:inta;inta,b;inta=3,b;<语句序列>→<语句>;<语句序列>语句有赋值语句<标示符>=<表达式>读语句:scanf(“<标示符>”)写语句:printf(<字符串>);条件语句:if(条件){}else{}If(条件){}循环语句:while(条件){}For(i=1;i<=10;i++){}1.2抽象文法1.2.1构造LL1要解决的关键问题本编译器采用LL1文法,设

7、计LL1文法有两个关键点:1、消除文法左递归:左递归文法如:E->E+EE->id

8、num可使用增加中间非终结符的方法消除左递归,消除后为:E->T+EE->TT>id

9、num2、消除分析表多重定义上述文法仍不是LL1文法,采用提公因子的方法修改上述文法后可得LL1文法:E->TE’E-‘>+T

10、$T>id

11、num1.2.2C语言子集的LL1文法[Terminal]:mainprintfscanfvoidintcharboolidnumchifelsewhilefor;,(){}===!=><+-*/&&

12、

13、!++--#(结束符)[Nonerminal]:S,B,A,C,,

14、X,R,Z,Z’,U,U’,E,E’,H,H’,G,M,D,L,L’,T,T’,F,O,P,Q[Starter]:S[Precept]:1、文法开始:(1)S->voidmain(){A}2、声明:(2)X->YZ;(3)Y->int(4)Y->char(5)Y->boolZ->UZ’Z’->,Z

15、$U->idU’U’->=L

16、$3、赋值:R->id=L;4、算术运算:L->TL’L’->+L

17、-L

18、$T->FT’T’->*T

19、/T

20、$F->(L)F->id

21、numO->++

22、--

23、$Q->idO

24、$1、布尔运算E->HE’E’->&&E

25、$H->GH’H’->

26、

27、HH’-

28、>$G->FDFD-><

29、>

30、==

31、!=G->(E)G->!E5、控制语句B->if(E){A}else{A}B->while(E){A}B->for(YZ;G;Q){A}6、功能函数B->printf(P);B->scanf(id);P->id

32、ch

33、num7、复合语句A->CAC->X

34、B

35、RA->$2、需求分析为C语言子集设计一个简单编译器,要求有友好的图形界面,能够实现编译的词法分析,语法分析和语义分析功能,并具备一定的错误处理能力,给出总的出错报告,编译最终形成四元式的中间代码形式。3、系统设计4、详细设计4.1构造LL1分析表1、求个产生式的select集注意:

36、一定要记得求空产生式A->$的select集具体过程(略),结果可见LL1分析表2、最终获得的LL1分析表mainprintfscanfvoidintcharboolid(自定义变量)num(int常量)ch(char常量)SS>voidmain(){A}AA->CAA->CAA->CAA->CAA->CAA->CABB->printf(P);B->scanf(id);CC->BC->BC->XC->XC->XC->RXX->YZX->YZX->YZYY->intY->charY->boolZZ->UZ’Z’Z’->$UU->idU’U’RR->id=L;PP->idP->

37、numP->chEE->HE’E->HE’E’E’->$HH->GH’H->GH’GG->FDMG->FDMH’H’->$H’->$DLL->TL’L->TL’L’L’->$L’->$TT->FT’T->FT’T’T’->$T’->$FF->idF->numOQQ->idOifelsewhilefor;,(){}===SAA->CAA->CAA->CAA->CABB->If(G){A}else{A}B->while(G){A}B->for(YZ;G;Q){A}CC->BC->BC->BC->BXYZZ’Z’->,Z

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。