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

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

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 课程设计报告 题目:C语言子集编译器设计 学号: 姓名: 班级: 教师 得分: 日期: 广西大学 计算机科学与电子信息学院 1、设计任务 1.1编译的语言 本编译器编译的语言为C语言子集,具体如下: 算术运算符:+ - * / 关系运算: = = != === 逻辑运算 || ! 赋值运算 = 数字 0 1 2 3 4 5 6 7 8 9 字符 a…..z A…..Z 标示符的命名规则:由字母和下划线组成,打头的只能是字母,区分大小写,不能和关键字重复。 注释:单行注释// 多行注释/* */ 数据类型有整型int ,字符型char 符合数据类型有数组 int a[6] 程序由一个主函数组成 主函数 → void main(){复合语句} 复合语句 → 常量说明部分变量定义部分语句序列 常量定义 → int 标示符=整数{,int 标示符=整数} | char 标示符=字符{,char 标示符=字符} | 变量定义:int a; int a,b; int a=3,b; 语句序列 → 语句;语句序列 语句有赋值语句 标示符=表达式 读语句:scanf(“标示符”) 写语句:printf(字符串); 条件语句:if(条件){}else{} If (条件){} 循环语句: while(条件){} For(i=1;i=10;i++){} 1.2抽象文法 1.2.1构造LL1要解决的关键问题 本编译器采用LL1文法,设计LL1文法有两个关键点: 消除文法左递归: 左递归文法如: E-E+E E-id|num 可使用增加中间非终结符的方法消除左递归,消除后为: E-T+E E-T Tid|num 消除分析表多重定义 上述文法仍不是LL1文法,采用提公因子的方法修改上述文法后可得LL1文法: E-TE’ E-‘+T|$ Tid|num 1.2.2 C语言子集的LL1文法 [Terminal]:main printf scanf void int char bool id num ch if else while for ; , ( ) { } = == != + - * / || ! ++ -- #(结束符) [Nonerminal]:S,B,A,C,,X,R,Z,Z’,U,U’,E,E’,H,H’,G,M,D,L,L’,T,T’,F,O,P,Q [Starter]:S [Precept]: 文法开始: S-void main(){A} 声明: (2) X-YZ; (3) Y- int (4) Y-char (5) Y-bool Z-UZ’ Z’-,Z|$ U-idU’ U’-=L|$ 赋值: R-id=L; 算术运算: L-TL’ L’-+L|-L|$ T-FT’ T’-*T|/T|$ F-(L) F-id|num O-++|--|$ Q-idO|$ 布尔运算 E-HE’ E’-E|$ H-GH’ H’-||H H’-$ G-FDF D-||==|!= G-(E) G-!E 5、控制语句 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|ch|num 7、复合语句 A-CA C-X|B|R A-$ 2、需求分析 为C语言子集设计一个简单编译器,要求有友好的图形界面,能够实现编译的词法分析,语法分析和语义分析功能,并具备一定的错误处理能力,给出总的出错报告,编译最终形成四元式的中间代码形式。 3、系统设计 4、详细设计 4.1构造LL1分析表 1、求个产生式的select集 注意:一定要记得求空产生式A-$的select集 具体过程(略),结果可见LL1分析表 2、最终获得的LL1分析表 main printf scanf void int char bool id (自定义变量) num(int常量) ch(char 常量) S S void main(){A} A A-CA A-CA A-CA A-CA A-CA A-CA B B- printf(P); B- scanf(id);

文档评论(0)

ze122230743 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档