编译原理课程设计报告_算符优先分析法
编译原理课程设计报告 选题名称: 算符优先分析法 系(院): 专 业:
计算机工程学院
计算机科学与技术
班 级: 姓 名: 学 号:
指导教师: 学年学期:
7>2012 ~ 2013 学年 第 1 学期
2012年 12 月 04 日 设计任务书
课题 名称 算符优先分析法 设计 目的
通过一周的课程设计,对算符优先分析法有深刻的理解,达到巩固理论
实
验
环
境
知识、锻炼实践能力、构建合理知识结构的目的。
Windows2000以上操作系统,Visual C++6.0编译环境 任务要求
1.判断文法是否为算符优先文法,对相应文法字符串进行算符优先分析;
2.编写代码,实现算符优先文法判断和相应文法字符串的算符优先分析; 3.撰写课程设计报告; 4提交报告。
1
工作进度计划
序号
起止日期 工 作 内 容
理论辅导,搜集资料 2 ~ 编写代码,上机调试
3 撰写课程设计报告 4 提交报告
指导教师(签章):
年 月 日
摘要:
编译原理是计算机专业重要的一门专业基础课程,内容庞大,涉及面广,知识点多。本次课程设计的目的正是基于此,力求为学生提供一个理论联系实际的机会,通过布置一定难度的课题,要求学生独立完成。我们这次课程设计的主要任务是编程实现对输入合法的算符优先文法的相应的字符串进行算符优先分析,并输出算符优先分析的过程。算符优先分析法特别有利于表达式的处理,宜于手工实现。算符优先分析过程是自下而上的归约过程,但这种归约未必是严格的规范归约。而在整个归约过程中,起决定作用的是相继连个终结符之间的优先关系。因此,所谓算符优先分析法就是定义算符之间的某种优先关系,并借助这种关系寻找句型的最左素短语进行归约。通过实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知识的习惯,树立团队协作精神。同时,课程设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷。
关键字: 编译原理;归约;算符优先分析;最左素短语; 目 录 1 课题综述
1
1.1 课题来源 1 1.2课题意义 1 1.3 预期目标 1 1.4 面对的问题 2 系统分析
2
1
2.1 基础知识 2
2.2 解决问题的基本思路 5 2.3 总体方案 5 3 系统设计
6
3.1 算法实现 6 3.2 流程图 4 代码编写 5 程序调试
7 8 11
6 运行与测试 12 总 结 13 致 谢 14 参考文献 15
1 课题综述 1.1 课题来源
算符文法:即它的任一产生式的右部都不含两个相继的非终结符的文法。如果G是一个不含空字符的算法文法,那么只要它的任一对终结符都只满足 , , 的关系的一种,则称G是一个算符优先文法。
1.2课题意义
算符优先文法在规约过程中只考虑终结符之间的优先关系确定句柄,而与非终结符无关,只需知道把当前句柄规约为某一非终结符,不必知道该非终结符的名字是什么,这样也就去掉了单非终结符的规约,因为若只有一个非终结符时无法与句型中该非终结符的左部及右部的串比较优先关系。也就无法确定该非终结符为句柄。
1.3 预期目标
编写程序,实现文法的算符优先判断,并对输入的符合算符优先文法的字符串进行算符优先分析。首先对输入的表达式求FIRSTVT集和LASTVT集,然后根据优先级关系构造算符优先关系表,最后进行算符优先分析的过程。过实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索知识的习惯。
1.4 面对的问题
如何通过自底向上的方法分析表达式,构造文法的优先矩阵,以及如何运用该优先矩阵完成移入和归约的过程,从而完成整个文法的分析。
1.5 需解决的关键技术
本次课程设计中的关键是:扫描和语法分析函数,它使用一个用于存放文法符号的先进后出栈,并利用有限关系可以确定最左素短语是否已形成来决定分析器的动作。如果当前栈顶的终结符号和带输入符号之间优先关系是 或 则表示栈顶符号串未形成最左素短语,此时分析器将移进输入符号。如果当前栈顶的终结