编译原理课程设计说明书-IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式).docx
- 文档编号:142368
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:21
- 大小:95.40KB
编译原理课程设计说明书-IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式).docx
《编译原理课程设计说明书-IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式).docx》由会员分享,可在线阅读,更多相关《编译原理课程设计说明书-IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式).docx(21页珍藏版)》请在冰豆网上搜索。
武汉理工大学编译原理课程设计说明书1课程设计任务书学生姓名:
专业班级:
指导教师:
工作单位:
题目:
IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)初始条件:
理论:
学完编译课程,掌握一种计算机高级语言的使用。
实践:
计算机实验室提供计算机及软件环境。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码四元式的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:
1系统描述(问题域描述);2文法及属性文法的描述;3语法分析方法描述及语法分析表设计;4按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5编译系统的概要设计;6详细的算法描述(流程图或伪代码);7软件的测试方法和测试结果;8研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:
周1、周2:
完成系统分析及设计。
周3、周4:
完成程序调试及测试。
周5:
撰写课程设计报告。
设计验收安排:
设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:
设计周的次周星期一上午10点。
指导教师签名:
年月日系主任(或责任教师)签名:
年月日武汉理工大学编译原理课程设计说明书2目录1系统描述1.1目的1.2设计内容及步骤1.3开发平台2文法及属性文法的描述2.1文法描述2.2属性文法描述3语义分析方法的描述及分析表设计3.1优先关系定义3.2简单优先文法定义3.3简单优先文法的算法步骤3.4语义分析方法描述3.5分析表构造4中间代码形式描述及结构设计5编译系统的概要设计6算法描述6.1预定义模块6.2词法分析6.3语法分析6.4其他模块武汉理工大学编译原理课程设计说明书36.5主程序7测试方法和结果7.1测试方法7.2测试结果8设计总结8.1设计优点8.2设计缺点8.3考虑改进9收获与体会10参考文献武汉理工大学编译原理课程设计说明书4IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)1系统描述1.1实验目的对条件语句:
IFTHENELSE
(1)按给定的题目写出符合语法分析方法要求的文法和属性文法描述。
(2)按给定的题目给出语法分析方法的思想及分析表的设计。
(3)按给定题目给出中间代码序列的结构设计。
(4)完成相应的词法分析、语法分析和语义分析程序设计。
(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
1.2开发平台VisualC+6.0、WindowsXP2文法及属性文法的描述2.1文法描述
(1)S-ifEthenBelseB
(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-AropAE.true=nextstat;E.codebegin=nextstat;E.false=nextstat+1;武汉理工大学编译原理课程设计说明书5emit(“if”A.place“rop”A.place“goto”-);emit(“goto”-)
(2)E-(A)E.place=A.place(3)A-idp=lookup(id.name);ifp!
=nullthenA.place=pelseerror(4)B-d=Cd.place=C.place(5)C-AopAC.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,BY(3)XBD,B=X,BX,D=Y3.2简单优先文法定义若一个文法是简单优先文法必须满足以下条件:
(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立
(2)在文法中任意两个产生式没有相同的右部其中第一条是必须满足的,第二条若不满足则会导致规约不唯一。
3.3简单优先文法的算法步骤首先根据已知优先文法构造相应优先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:
(1)将输入符号串a1,a2aN#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性下一个带输入符号aj时为止。
(2)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到ak-1a,Sa,a为文法符号LA(S)=a|S=a,Sa,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=1i对应元素优先级小于j的(3)aii=2i对应元素优先级大于j的(4)aii=3i对应元素优先级等于j的而在分析过程中规约产生式的选择则在语法分析过程中,在语法分析过程中实现。
分析表最终结果如下:
intanltable2222=/*S*/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,/*(*/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*/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,/*_*/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,武汉理工大学编译原理课程设计说明书7主程序预定义/*/*/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。
运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。
例如:
a=b*c+b*d的四元式表示如下:
(1)(*,b,c,t1)
(2)(*,b,d,t2)(3)(+,t1,t2,t3)(4)(=,t3,-,a)四元式和三元式的主要不同在于,四元式对中间结果的引用必须通过给定的名字,而三元式是通过产生中间结果的三元式编号。
也就是说,四元式之间的联系是通过临时变量实现的。
5编译系统的概要设计
(1)系统主要分为两个模块:
词法分析和语法分析(包括语义分析)。
并且在分析过程中将词法分析产生的单词输出到文件,语法分析过程中分析栈的变化情况输出到文件。
(2)系统设计采用过程化的设计方法,将词法分析、语法分析等功能模块在独立的过程中实现。
(3)系统概要结构如下:
1)预定义模块2)词法分析模块3)语法分析模块4)其他辅助模块5)主程序模块(主要指程序入口函数main())各模块调用关系如下:
词法分析语法分析武汉理工大学编译原理课程设计说明书86算法描述6.1预定义模块预定义模块主要包括宏定义、常量定义、类型定义以及全局变量定义等。
具体如下:
(1)宏定义#defineOK1/正常#defineERROR-1/出错#defineFAILURE-1/分析失败
(2)类型定义structatt/名字表类型stringsname;charselect;charaddre;typedefstructSqStackchar*base;char*top;intstacksize;SqStack;/栈定义(3)全局变量intlineno=1;/输出时的当前行号charch;/当前字符charallname3030;/单词全名charout3030;/保存单词简称attattname40;/名字表(4)优先关系表初始化(见3.5.2)6.2词法分析词法分析主要为analysis(ifstream&fin,ofstream&fout)函数,其中fin为输入文件流,fout为单词输出文件流。
辅助函数为judge(char*string),判断单词是否为关键字。
分析算法如下描述:
while(true)其他辅助模块武汉理工大学编译原理课程设计说明书9字符串存放临时数组temp;if(到文件末尾)break;读取一个字符到ch;if(ch是换行)lineno+=1;elseif(ch是字符)while(ch是字符或数字)ch存入temp;读取下一个字符;判断temp是否为关键字,并根据判断结果使temp入名字表并设置正确的属性。
elseif(ch是数字)while(ch是数字)ch存入temp;读取下一个字符;temp入名字表并设置正确的属性。
elseif(ch为其他合法字符(如:
=等等)填入名字表。
else输出错误,无法识别的字符。
6.3语法分析语法分析主要为laynax(ofstream&f)函数,其中,f为栈变化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 说明书 IF ELSE 条件 语句 翻译 程序设计 简单 优先 输出 四元式