收藏 分享(赏)

《编译技术》课程设计B.doc

上传人:sjmd695 文档编号:7051076 上传时间:2019-05-04 格式:DOC 页数:6 大小:219KB
下载 相关 举报
《编译技术》课程设计B.doc_第1页
第1页 / 共6页
《编译技术》课程设计B.doc_第2页
第2页 / 共6页
《编译技术》课程设计B.doc_第3页
第3页 / 共6页
《编译技术》课程设计B.doc_第4页
第4页 / 共6页
《编译技术》课程设计B.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、编译技术课程设计 B任 务 书一、 目的与要求为了巩固、理解课程编译技术所学知识,要求学生完成一个简单编译程序所涉及的主要模块。具体要求如下:1 独立完成词法分析器的设计与实现。通过设计、编写和调试词法分析程序(扫描器) ,了解扫描器的组成结构,不同种类单词的识别方法,掌握由单词的语法规则出发,画出识别单词的状态转换图,然后再用程序实现的扫描器设计方法。2 独立完成算符优先分析的设计与实现。通过设计、编写和调试算符优先分析程序,了解算符优先分析器的组成结构以及对文法的要求, 掌握实现通用算符优先分析算法的方法。3 基于算符优先分析方法的语法制导翻译的设计与实现。通过设计、编写和调试语法制导翻译

2、程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。这里假设采用的语法分析是自下而上的算符优先分析方法,采用的中间代码形式是四元式。二、 主要内容1 词法程序设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次,输出一个以内部形式表示的单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键字)能作一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。单词符号及其内部表示如下表所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制

3、数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值) 。单词符号及其内部表示单词符号 种别编码 单词的属性值BEGINIFTHEN123ELSEEND标识符常数(整型)=+*,()4567891011121314在名字表中的地址在常数表中的地址识别单词符号的状态转换图如下图所示。识别单词符号的状态转换图对于该状态转换图需要说明几个问题:(1) 0 状态是初始状态,在该状态滤掉无用空格。(2) 从初态出发读进一个字符串到达终态就识别了一个单词,即状态转换图每运行一次识别一个单词。(3) 若在标有“*”号的终态结束,意味着多读进一个不属于现行单词的字符,这个字符应该回

4、退。(4) 在 2 状态结束,意味着接受了一个基本字或标识符,还需要查一张基本字表,来区分这个单词是基本字还是标识符。(5) 13 状态是错误状态,在该状态进行错误处理。*2字母非字母与数字空白 0字母或数字 1数字数字*4非数字3=5 6+*非*8*97,10(11其它13)12用程序实现识别单词符号的状态转换图就能得到所要求的扫描器,其方法是对应每一个状态结点设计一个程序段,完成在读进可能输入的符号后该状态下所做的工作,再设计一个控制程序,通过判别当前状态和输入字符确定执行哪个状态对应的程序段。2 设计算符优先分析程序算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即

5、单词符号串,以一个“ ”结尾) ,如果输入串是句子则输出“YES” ,否则输出“NO”和错误#信息。算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。(1) 文法 设算符优先文法 为:GTE|FP|i)(说明:i 为整型常数或者为标识符表示整型变量;使用中用*表示。(2) 优先关系表 设优先关系表如下表所示。优先关系表+ * i ( ) #+*i ( ) # (3) 算符优先分析算法 算符优先分析算法中需要使用分析栈 存放文法符号,变S量 为栈 的栈顶指针,变量 存放当前输入符号。 为错误处理程序,分析算法如p

6、SaERO下:BEGINp:=1;/* 置分析栈 S 初值:“#”进空栈 */Sp:=#;REPET将下一个输入符号读入 a;IF SpV T THEN j:= p ELSE j:= p-1;WHILE Sja DOBEGINREPEATQ:=Sj;IF Sj-1V T THEN j:=j-1 ELSE j:=j-2;UNTIL SjQ; 将 Sj+1Sp归约为一个非终结符 N;p:=j+1;Sp:=N;END OF WHILE;IF Sja OR Sj=a THENBEGINp:=p+1;Sp:=a;ENDELSE ERROR;/* 错误处理 */UNTIL a=#;END.算法结束时,若分

7、析栈 呈现出:“ ”,则说明输入串是句子,否则输STACK#N入串不是句子。3 基于算符优先分析方法的语法制导翻译程序算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最左素短语,将其归约为一个非终结符号而实现的。这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法) 。基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析) ,每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用

8、一个通用的非终结符号表示) 。语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“ ”结尾) ,如果输#入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出) 。(1) 算符优先语法分析程序设算符优先语法分析程序使用的算符优先关系表和分析算法由本章 2.3.5 节给出,该算符优先语法分析程序实现了对算术表达式的语法分析。(2) 产生式的语义动作由于算符优先分析方法对产生式的非终结符号不加区分,这里将文法中的非终结符号只用一个 表示,各产生式的语义动作表示如下:E ).,.,.,(;:. 2121 placeElplaceEgenwtmpplace*.,.,.,;

9、:. 2121 llltl.)(1lceEE)(:.intryplacei注:i 为整型常数或者为标识符表示整型变量;E 为算术表达式,为了区分同一个产生式中不同的非终结符号 E,使用了下脚标加以区别;在使用中用*表示。(3) 语法制导翻译程序设计为了实现算数表达式的语法制导翻译,按照给出产生式的语义动作,对每个产生式设计出相应的语义子程序,语义子程序使用产生式右部文法符号的语义值,这些语义值取自符号表(终结符号)或分析栈的语义值部分(非终结符号) ,生成四元式(填入四元式表)和产生式左部文法符号的语义值(存入分析栈的语义值部分) ,语义子程序的调用由算符优先语法分析程序完成。 语义值 pla

10、ceE.是非终结符号 的一个语义值,表示算术表达式 值的存放地址(待分配存l. E储空间后,由此可得到实际存储单元地址) 。 语义过程 、 和newtmgentry是一个函数语义过程,其功能是申请一个临时存储单元,将来存放产生式的左etp部符号 的值,函数值是该存储单元的地址,为了简化程序设计,可以假设初值为 1,每调E用一次其值累加 1。是一个语义过程, 其功能是生成一个四元式).,.,.,(2placeEllaceogen,将该四元式填入四元式表,该四元式实现的功能是.,21plp,其中 代表一种算术运算符, 是非终结符号。lEc.:2oE是一个函数语义过程, 其功能是用 去查常数表或者名

11、字表,函数值是 在表)(ietry i i中的地址,它代表 的语义值(待分配存储空间后,由此可得到实际存储单元地址) ,为了区分常数表和名字表的地址,可以将表地址加上不同的整型常数(例如:100 和 200)以示区别。 涉及到的主要数据结构1) 分析栈 在算符优先语法分析中用一个一维数组 表示,这里扩展为二维1nS数组 , 的元素由两部分组成(共用一个栈顶指针) , 是终结符号、21,nSS ,i“ ”或非终结符 , 是对应 中文法符号 和 的语义值(运算符、 “(”和#E,i1,iSEi“) ”无语义值) ,类型为整型,表示地址,1in 。2) 四元式表 用来存放翻译程序生成的四元式序列,用

12、二维数组 表示,41,nB的元素(一个四元式)由四部分组成, 是运算符号(即终结符:“ ”、 “ ”或B,iB“ ”) , 、 和 是语义值 ,其类型全部为整型,表示地址,2,iS3,i4,iSplaceE.1in 。三、 进度计划序号 设计(实验)内容 完成时间 备注1 词法程序 2010.12.13 一天2 设计算符优先分析程序 2010.12.13-15 两天3 基于算符优先分析方法的语法制导翻译程序2010.12.16-17 上午,共一天半4 验收实验结果 2010.12.17 下午四、 设计(实验)成果要求通过实验之后,学生应该以下列两种方式之一提交成果:词法分析、语法分析、语法制导翻译三个模块各个独立,每个模块均能正确运行;词法分析、语法分析、语法制导翻译三个模块综合在一起,存在调用关系,构成一个简单的编译程序。五、 考核方式1 验收程序。要求程序要能够正确运行;2 按照学校要求,撰写实验报告。学生姓名:指导教师:黄建才2010 年 12 月 8 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报