欢迎来到天天文库
浏览记录
ID:9937247
大小:205.50 KB
页数:14页
时间:2018-05-16
《编译课程设计报告书》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、课程设计报告(2011--2012年度第1学期)名称:编译技术课程设计B题目:词法分析器设计算符优先分析程序设计基于算符优先分析方法的语法制导翻译程序设计院系:计算机系班级:网络学号:学生姓名:指导教师:岳燕黄建才设计周数:1周成绩:日期:2012年1月6日1一、课程设计的目的与要求1.词法分析器设计的目的与要求1.1词法分析器设计的目的实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计
2、和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。1.2词法分析器设计的要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。表1-1 单词符号及其内部表
3、示单词符号种别编码单词的属性值BEGINIFTHENELSEEND标识符整型常数+***()123456789101112—————在名字表中的地址十进制整数—————131.算符优先分析程序设计的目的与要求2.1算符优先分析程序设计的目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术,设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序
4、打下良好的基础。2.2算符优先分析程序设计的要求算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。(1)文法 设算符优先文法为:说明:i为整型常数或者为标识符表示整型变量;使用中↑用**表示。(2)优先关系表 设优先关系表如表1-2所示。表1-2 优先关系表+*↑i()#+*↑i()#131.基于算符优先分析方法的语法制导翻译程序的设计的目的和
5、要求3.1基于算符优先分析方法的语法制导翻译程序的设计的目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术,通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。3.2基于算符优先分析方法的语法制导翻译程序的设计的要求算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶
6、寻找最左素短语,将其归约为一个非终结符号而实现的。这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。二、
7、课程设计正文1.词法分析器设计1.1设计思想对输入的字符串逐个分类处理,若所取字符为字母,检验其是关键字或标识符,返回其种别码,标识符还要记录其在名字表中地址并输出;若所取字符为数字,记录其在常数表中的位置,返回种别码及其位置;若所取字符是运算符,返回其相应的种别码。1.2使用的相关函数及变量(1)voidscanner()在这个函数部分进行单词符号的识别,开始进行第一次扫描的时候,对数组token进行初始化,然后ch得到输入的字符
此文档下载收益归作者所有