logo资料库

编译程序构造.doc

第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
资料共56页,剩余部分请下载后查看
第1章课程设计目的
第2章课程设计要求
第3章课程设计内容
第4章设计方案
4.1 模块划分
4.1.1 词法分析
4.1.2 语法分析
4.1.3 语义分析
4.1.4 错误处理
4.2 模块调用
4.3 模块程序流程图
4.3.1 词法分析流程图
4.3.2 语法分析流程图
4.3.3 语义分析流程图
第5章程序源代码
5.1.1词法分析:”词法分析.h”
5.1.1语法分析 : “Main.cpp”
第6章程序测试数据和结果
6.1 源文件内容
6.2 文法 分析表
6.2.1 文法 语义函数
6.2.2 分析表
5.3 测试结果
6.1 设计体会
6.1.1 程序不足及改进
6.1.2 系统特色
北华航天工业学院 目 录 第 1 章 第 2 章 第 3 章 第 4 章 课程设计目的 ................................................................................................................ 1 课程设计要求 ................................................................................................................ 1 课程设计内容 ................................................................................................................ 1 设计方案 ........................................................................................................................ 4 4.1 模块划分 ............................................................................................................................. 4 4.1.1 词法分析 .................................................................................................................. 4 4.1.2 语法分析 .................................................................................................................. 4 4.1.3 语义分析 .................................................................................................................. 5 4.1.4 错误处理 .................................................................................................................. 5 4.2 模块调用 ............................................................................................................................. 5 4.3 模块程序流程图................................................................................................................. 7 4.3.1 词法分析流程图......................................................................................................7 4.3.2 语法分析流程图......................................................................................................8 4.3.3 语义分析流程图......................................................................................................9 程序源代码 .................................................................................................................. 10 5.1.1 词法分析:”词法分析.h”...................................................................................... 10 5.1.1 语法分析 : “Main.cpp”...................................................................................... 15 程序测试数据和结果 ..................................................................................................22 6.1 源文件内容....................................................................................................................... 22 6.2 文法 分析表..................................................................................................................... 22 6.2.1 文法 语义函数 ......................................................................................................22 6.2.2 分析表.................................................................................................................... 24 5.3 测试结果 ........................................................................................................................... 27 6.1 设计体会 ........................................................................................................................... 31 6.1.1 程序不足及改进....................................................................................................31 6.1.2 系统特色 ................................................................................................................ 31 6.2 结束语...............................................................................................错误!未定义书签。 第 5 章 第 6 章
北华航天工业学院 第 1 章 课程设计目的 《编译原理》课程设计是编译原理课程必不可少的一个环节,通过课程设计,加深对编 译原理的教学内容的了解,以及实现编译原理各部分知识的融合。进而提高学生分析问题、 解决问题,从而运用所学知识解决实际问题的能力。 第 2 章 课程设计要求 1.明确课设任务,复习与查阅有关资料 2.按要求完成课设内容,课设报告要求文字和图工整、思路清楚、正确。 3.注意增强程序界面的友好性。凡用户输入时,给出足够的提示信息使用户感到方便 使用。 4.注意提高程序的可读性和可理解性:程序中应有适当的注释,变量命名应符合实际 含义,程序结构清晰,易于阅读和理解。 第 3 章 课程设计内容 一、课程设计目的 《编译原理》课程设计是编译原理课程必不可少的一个环节,通过课程设计,加深对编 译原理的教学内容的了解,以及实现编译原理各部分知识的融合。进而提高学生分析问题、 解决问题,从而运用所学知识解决实际问题的能力。 二、课程设计要求 1.明确课设任务,复习与查阅有关资料 2.按要求完成课设内容,课设报告要求文字和图工整、思路清楚、正确。 3.注意增强程序界面的友好性。凡用户输入时,给出足够的提示信息使用户感到方便 使用。 4.注意提高程序的可读性和可理解性:程序中应有适当的注释,变量命名应符合实际 含义,程序结构清晰,易于阅读和理解。 三、课程设计内容 1.题目:编译程序构造 2.内容:涉及词法分析、自下而上语法分析程序的实现:SLR(1)分析器的实现以 及生成中间代码。 3.具体要求 根据 LR 分析算法构造 SLR(1)分析程序,并完成语法分析动作(当需要一个单词时, 调用词法分析程序获取),同时完成语义分析生成四元式输出。要求程序具有通用性,改变 文法时只需改变程序的数据初值,无需改变程序主体; (1)基本要求:完成 1 条说明语句、2 条算数表达式和赋值语句的翻译,生成中间代码。 1
北华航天工业学院 (2)高级要求:在完成基本要求的基础上,实现 if 语句和布尔表达式的翻译。if 语句 的文法和翻译方案参见课本。 变量说明语句的文法及相应的语义子程序:.att 表示数据类型属性,fill 函数表示将单词 id 及其类别属性填写符号表。 (0)S→D; {acc} (1)D→int id (2)D→float id (3)D→D(1),id { fill(id,int);D.att=int; } {fill(id,float); D.att=float; { fill(id,D(1).att);D.att=D(1).att; } } 算数表达式和赋值语句的文法及相应的语义子程序。 (1)A→id=E; {p=lookup(id.name); emit(E.PALCE, , p);} (2)E→E(1)+T (3)E→T {E.PALCE=newtemp(); emit(+,E(1).PALCE,T.PALCE,E.PALCE)} {E.PALCE=T.PALCE;} (4)T→T(1)*F {T.PALCE=newtemp(); emit(+,T(1).PALCE,F.PALCE,T.PALCE)} (5)T→F (6)F→(E) (7)F→id (8)F→num {T.PALCE=F.PALCE;} { F.PALCE=E.PALCE;} {P=LOOKUP(id.name) F.PALCE=P;} { P=LOOKUP(num.value) F.PALCE=P;} 构造其用于 SLR(1)分析的识别活前缀的 DFA 以及 action 表和 goto 表。然后编程实现。 (关于词法分析部分只需识别出与此文法相关的单词即可(+,*,(,),id,=))。 4.程序设计提示: (1)分析栈设计时可以用一个栈完成,也可以设计三个栈:一个符号栈,一个状 态栈,一个语义栈,则归约时,则需要在符号栈中退掉 n 个符号,在状态栈中退掉 n 个符号 (n 为产生式符号个数),语义栈中退掉 n 个符号对应的语义; (2)终结符表和非终结符表的组织和预测分析程序中相同(将符号对应到一个数 字,表示在分析表中对应的下标)。 (3)action 表中的错误处理:简化的错误处理:当查找 action 表出现空白时,则 当前单词无法移进和规约,可简单的认为当前单词为多余的单词,则抛弃当前单词,读下一 单词继续分析。 5.测试数据: 作为程序测试数据,以赋值语句 area=r*r+r$作为测试输入(源程序)。程序要求输 出二元式序列、符号表、语法分析过程、四元式序列。 假设 AA.TXT 的文件内容如下: int area,r; r=1; area=r*r+r; 程序运行情况如下: 请输入源文件名称:E:\AA.TXT<回车> 2
北华航天工业学院 语义栈 动作说明 语法分析过程如下: 状态栈 符号栈 源程序对应的二元式如下: (int,-) (id,0) (,,-) (id,1) (;,-) (id,1) (=,) (num,0) (id,0) (=,) (id,1) (*,) (id,1) (+,) (id,1) (;,-) 符号表如下: Name area r 0 1 value addr type int int 数字表如下 源程序对应的四元式序列如下: (=,1, , r) (*,r,r,T1) (+,T1,r,T2) (=,T2,,area) 分析过程完成。 6.程序扩展要求 有能力的同学可将编译程序扩展布尔表达式、if 语句的分析和四元式生成,布尔表达 式和 if 语句的翻译参见教材。 四、课程设计过程要求 每人独立完成上述设计内容,完成后由教师验收认可,最后上交实验报告和设计成果以 及成果使用说明书,实验报告每人独立撰写,设计成果放在一个文件夹中,文件夹用学生学 号+姓名命名。 3
北华航天工业学院 第 4 章 设计方案 4.1 模块划分 4.1.1 词法分析 词法分析程序是编译程序主要组成部分之一,它的主要任务是从构成源程序的字符串中 识别出一个个具有独立意义的最小语法单位(单词)。词法分析程序的输入为字符串,而输出 为提供给语法分析的单词串。为了能有效地从源程序文本中分离出这些单词,词法分析程序 必须对源程序文本进行编辑,例如消除文本中的注释、空格、换行符以及其它一切对语法分 析和代码生成均无关的信息。除此之外,为了能正确识别出单词,有时还需要区别一串字符 究竟是保留字(如 IF)还是标识符。有时为了将标识符、常量等转换为内部形式并插入表格 中,词法分析程序还需要执行维护符号表的工作,等等。 词法也是语法的一部分,词法描述完全可以归并到语法描述中去,只不过词法规则更简 单些。这在后面的章节中可以看到。为什么将词法分析做为一个独立的阶段? 为什么把编译 过程的分析工作划分成词法分析和语法分析两个阶段? 主要的考虑因素为: 1. 使整个编译程序的结构更简洁、清晰和条理化。词法分析比语法分析简单的多,但 是由于源程序结构上的一些细节,常使得识别单词的工作甚为曲折和费时。例如,空白和注 释的处理; 2.编译程序的效率会改进。大部分编译时间是花费在扫描字符以把单词符号分离出来。 把词法分析独立出来,采用专门的读字符和分离单词的技术可大大加快编译速度。另外,由 于单词的结构可用有效的方法和工具进行描述和识别,进而可建立词法分析程序的自动构造 工具。 3. 增强编译程序的可移植性。在同一个语言的不同实现中,或多或少地会涉及到与设 备有关的特征,比如采用 ASCII 还是 EBCDIC 字符编码。都可置于词法分析程序中解决而不 影响编译程序其它成分的设计。 处理词法分析程序与语法分析程序之间的关系又可采用两种方式:一种方式是将词法分 析作为单独一遍扫描,即在语法分析之前,实现源程序的全部词法分析工作,其输出(单词 申)形成一个中间文件(内部符号形式的源程序表),移交给语法程序。另一种方式为将词法分 析程序编写成一个子程序,每当语法分析程序需要读一个新单词时,便去调用它。本次课程 设计采用前一种方式。 4.1.2 语法分析 语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法 分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生 成作准备。执行语法分析任务的程序叫语法分析程序或语法分析器。 语法分析程序以词法分析输出的符号串作为输入,在分析过程中检查这个符号串是否为 该程序语言的句子。若是,输出该句子的分析树;若不是,则表示源程序存在语法错误,需 4
北华航天工业学院 要报告错误的性质和位置。 常用的语法分析方法大体上可以分成自顶向下和自底向上两大类: 1. 自顶向下分析方法:语法分析从顶部(树根、语言的识别符号)到底部(叶子、语言的 终结符号)为输入的符号串建立分析树。本章介绍的递归下降分析方法和 LL 分析方法就属于 自顶向下分析方法。 2. 自底向上分析方法:语法分析从底部到顶部为输入的符号串建立分析树。最常见的 LR 分析方法采用的就是自底向上分析方法。我们将在第五章介绍这种分析方法。 无论采用哪种分析方法,语法分析都是自左向右地读入符号。 4.1.3 语义分析 语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行 上下文有关性质的审查,进行类型审查。语义分析是审查源程序有误语义错误,为代码生成 阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言 规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实 数用作数组下标的情况报告错误。又比如某些某些程序规定运算对象可被强制,那么当二目 运算施于一整型和一实型对象时,编译程序应将整型转换为实型而不能认为是源程序的错 误。 4.1.4 错误处理 错误处理在整个编译程序中都占有很重要的地位,它贯穿于整个编译程序的前后,词法 分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成都涉及错误处理,一 个好的词法分析器,错误处理应该占有举足轻重的地位。错误处理的完善是一个编译程序功 能强大的后盾。 4.2 模块调用 语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法 分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生 成作准备。 5
如图 4-2-1 所示。 词 法 分 析 器 错 误 处 理 北华航天工业学院 语法分析器 错 误 处 理 语 义 分 析 错 误 处 理 图 4-2-1 模块调用 中 间 代 码 生 错 误 处 理 6
北华航天工业学院 4.3 模块程序流程图 4.3.1 词法分析流程图 N 数字 Y 读 取 数 N Error 特殊字符 Y 读取字符 错误状态 查 询 常 量 相 同 N 填 常 数 Y 图 3-3-1 所示 开始 初 始 N 字母 Y 读 标 识 查 关 键 字 关 键 N 查标识表 Y 相 同 Y N 填 标 识 符 写到输出流 N EOF Y 结束 结束 图 3-3-1 词法分析流程图 7
分享到:
收藏