编译原理课程设计

上传人:s9****2 文档编号:498725824 上传时间:2023-07-08 格式:DOCX 页数:17 大小:95.11KB
返回 下载 相关 举报
编译原理课程设计_第1页
第1页 / 共17页
编译原理课程设计_第2页
第2页 / 共17页
编译原理课程设计_第3页
第3页 / 共17页
编译原理课程设计_第4页
第4页 / 共17页
编译原理课程设计_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《编译原理课程设计》由会员分享,可在线阅读,更多相关《编译原理课程设计(17页珍藏版)》请在金锄头文库上搜索。

1、课程设计任务书学生姓名: 专业班级:指导教师:_工作单位:计算机科学与技术学院题目:IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行 设计。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。(2)完成题目要求的中间代码四元式的描述。(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。(5)

2、设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1系统描述(问题域描述);2文法及属性文法的描述;3语法分析方法描述及语法分析表设计;4按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5编译系统的概要设计;6详细的算法描述(流程图或伪代码);7软件的测试方法和测试结果;8研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周

3、星期一上午10点。指导教师签名:系主任(或责任教师)签名:2012年10月23日2012年10月23日IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)1系统描述i.i实验目的对条件语句:IF布尔表达式THEN赋值语句ELSE赋值语句(1) 按给定的题目写出符合语法分析方法要求的文法和属性文法描述。(2) 按给定的题目给出语法分析方法的思想及分析表的设计。(3) 按给定题目给出中间代码序列的结构设计。(4) 完成相应的词法分析、语法分析和语义分析程序设计。(5) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。1.2开发平台Visual C+ 6.0、 Window

4、s XP2文法及属性文法的描述2.1文法描述(1) S-if E then B else B(2) E-(AA)(3) E-(A(A)(5) A-d(6) A-num(7) B-(d=C(8) C-A+A(9) C-A-A(10) C-A*A(11) C-A/A(12) C-A其中,d代表变量,num代表常量(这里仅限数字),E布尔表达式,B为赋值表达 式,C为算术表达式2.2属性文法描述(1) E-A rop A E.true二nextstat;E.codebegin二nextstat;E.false二nextstat+1;emit(if” A.place rop” A .place got

5、o” -);emit( goto” -)(2) E-(A)E.place二A.place(3) A-id p=lookup(id.name);if p!二null thenA.place=pelse error(4) B-(d=C d.place二C.place(5) C-A op AC.place二newtemp;emit(C.place =” A.place op” A .place)(6) C-AC.place二A.place注:rop为或Y表示X的优先性比Y的优先性大XXY(2) XY 当且仅当G中存在产生式规则A-XB,B=Y,B尹Y(3) XBD,B=X,B尹X,D=Y3.2简单优

6、先文法定义若一个文法是简单优先文法必须满足以下条件:(1) 在文法符号集V中,任意两个符号之间最多只有一种优先关系成立(2) 在文法中任意两个产生式没有相同的右部其中第一条是必须满足的,第二条若不满足则会导致规约不唯一。3.3简单优先文法的算法步骤首先根据已知优先文法构造相应优先关系矩阵,并将文法的产生式保存,设置符 号栈S,算法步骤如下:(1) 将输入符号串a1,a2aN#依次逐个存入符号栈S中,直到遇到栈顶符号ai 的优先性下一个带输入符号aj时为止。(2) 栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到 ak-1a,S尹a, a为文法符号LA (S) =(a|S=a,

7、 S尹a,a 为文法符号3.5.1.2改造后的优先关系计算当文法中存在A-XY时,X=Y当文法中存在A-XB时,XBD时,LA (B) D且LA (B) FA (D)3.5.2分析表结构分析表采用二维数组存储方式,文法中的每一个符号对应数组a中的一个位 置, 而aij代表第i个和第j个的优先关系:(1) aii=0(2) aii = 1(3) aii=2(4) aii=3无优先关系i对应元素优先级小于j的i对应元素优先级大于j的i对应元素优先级等于j的而在分析过程中规约产生式的选择则在语法分析过程中,在语法分析过程中实 现。分析表最终结果如下:int anltable2222 = /*S*/

8、0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,/*if*/ 0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/*E*/ 0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/*then*/ 0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,/*B*/ 0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,/*else*/ 0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0

9、,/*(*/ 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*)*/ 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/*/ 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*/ 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*=*/ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,0,0,0,0,0,0,0,/*A*/ 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,2,3,3,3,3,0,/*d

10、*/ 0,0,0,0,0,0,0,2,2,2,3,0,0,0,0,0,2,2,2,2,2,0,/*num*/ 0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,2,2,2,2,2,0,/*C*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,/*/ 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,/*/ 0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,/*+*/ 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*_*/

11、 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*/ 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*/*/ 0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,/*#*/ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,;/0-error ,1= ,3=4中间代码形式描述及结构设计四元式是一种比较普遍采用的中间代码形式。四元式的四个组成成分是:算符op,第 一和第二运算对象ARG1和ARG2及运算结果RESULT。运算对象和运算结

12、果有时指 用户自己定义的变量,有时指编译程序引进的临时变量。例如:a=b*c+b*d的四元式表示如下:(1)(*, b, c, t1)(2)(*, b, d, t2)(3)(+, t1, t2, t3)(4)(=, t3, -, a)四元式和三元式的主要不同在于,四元式对中间结果的引用必须通过给定的名字,而 三元式是通过产生中间结果的三元式编号。也就是说,四元式之间的联系是通过临时 变量实现的。5编译系统的概要设计(1)系统主要分为两个模块:词法分析和语法分析(包括语义分析)。并且在分析过 程中将词法分析产生的单词输出到文件,语法分析过程中分析栈的变化情况输 出到文件。(2)系统设计采用过程化

13、的设计方法,将词法分析、语法分析等功能模块在独立的 过程中实现。(3)系统概要结构如下:1)预定义模块2)词法分析模块3)语法分析模块4)其他辅助模块5)主程序模块(主要指程序入口函数main()各模块调用关系如下:6算法描述6.1预定义模块预定义模块主要包括宏定义、常量定义、类型定义以及全局变量定义等。具体如下:(1)宏定义#define OK 1 /正常#define ERROR -1 /出错#define FAILURE -1 /分析失败(2)类型定义struct att(/名字表类型string sname;char select;char addre;typedef struct SqStack(char *base;char *top;int stacksize;SqStack;/栈定义(3)全局变量int lineno = 1;/输出时的当前行号char ch ; /当前字符char allname3030;/单词全名char out30

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号