编译原理结课论文.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1. 绪论 (2)
1.1概述 (2)
1.2设计目的 (2)
1.3设计题目及要求 (2)
2.背景知识 (3)
2.1语法制导翻译方法 (3)
2.2属性文法 (3)
2.3几种常见的中间语言 (4)
2.4四元式的简介 (4)
3.设计过程 (5)
3.1设计思路 (5)
3.2实现 (6)
4.上机调试运行 (6)
4.1代码调试界面及结果 (7)
4.2执行及结果 (7)
5.注意事项 (8)
6.总结 (9)
参考文献 (10)
附录 (11)
1.绪论
1.1概述
“编译原理”是一门研究设计和构造编译程序原理课程,是计算机各专业的一门重要的专业课。编译原理这门课程蕴含着计算机学科中解决问题的思路和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。“编译原理”是一门实践性很强的课程,要掌握这门课程中的思想,就必须要把所学到的知识应用于实践当中。而课程设计是将理论与实践相互联系的一种重要方式。1.2设计目的
课程设计是对学生的一种全面综合素质训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂很多,但也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构解决问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的能力。
1.3设计题目及要求
基于这个学期所学习的内容以及自己所掌握到的知识,本次我所要设计的题目是赋值语句的四元式生成。
要求:
(1)设计语法制导生成赋值语句的四元式的算法;
(2)编写代码并上机调试运行通过;
(3)输入一赋值语句;
(4)输出相应的表达式的四元式;
2.背景知识
2.1语法制导翻译方法
语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析的过程中,当一个产生式获得匹配(对于自顶向下分析)或用于规约(对于自底向上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。语法制导翻译分为自底向上语法制导翻译和自顶向下语法制导翻译。
2.2属性文法
属性文法是编译技术中用来说明程序语言语义的工具,也是当前实际应用中比较流行的一种语义描述方法。属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。属性文法是一种适用于定义语义的特殊文法,即在语言的文法中增加了
属性的文法,它将文法符号的语义以“属性”的形式附加到各个文法的符号上,再根据产生式所包含的含义,给出每个文法符号属性的求值规则,从而形成一种带有语义属性的上下文无关文法,即属性文法。属性文法也是一种翻译文法,属性有助于更详细的指定文法中的代码生成动作。
2.3几种常见的中间语言
(1)抽象语法树
(2)逆波兰表示法
(3)三地址代码
在编译程序中,三地址代码语言的具体实现通常有三种表示方法:四元式、三元式和间接三元式。
2.4四元式的简介
四元式是具有四个域的记录(即结构体)结构,这四个域为:
(op,arg1,arg2,result)
其中,op为运算符,arg1、arg2及result为指针,他们可指向有关名字在符号表中的登记项或一临时变量(也可空缺)。常用的三地址语句与相应的四元式对应如下:
X=y op z 对应(op,y,z,x)
X=-y 对应(uminus,y,_,x)
X=y 对应(=,y,_,x)
Par x1 对应(par,x1,_,_)
Call p 对应(call,_,_,p)
Goto L 对应(j,_,_,L)
If x rop y goto L 对应(jrop,x,y,L)
注意规则:
如果op是一个算术或逻辑运算符,则result总是一个新引进的临时变量,它用来存放运算结果。四元式出现的顺序与表达式计值的顺序是一致的,四元式之间的联系是通过临时变量实现的。四元式由于其表示更接近程序设计的习惯而成为一种普遍采用的中间代码形式。
3.设计过程
3.1设计思路
(1)定义部分:定义常量、变量、数据结构。
(2)初始化:设立算符优先分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等
(3)控制部分:从键盘输入一个表达式符号串;
(4)利用算符优先分析算法进行表达式处理:根据算符优先分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。
3.2实现
本设计主要通过C语言来实现。C语言的语法结构类型很多,从实习的角度可分为以下六类:
⑴明语句。如各种数据类型说明(整型、实型、布尔型、字符
型、复型、双精度型、枚举、子界、数组、集合、文件、记
录、指针等),各种数据空间特性说明(如公用语句,共名语
句,等价语句等),初值语句。实习重点是内存空间的分配方
法。
⑵序结构语句。典型代表是各类表达式(如算术表达式、布尔
表达式、字符表达式、位表达)及相应的赋值语句。实习重
点是算术表达式的翻译方法。
⑶制结构语句。常见的有转移语句、条件语句和各种分叉语句。
实习重点是拉链返填的方法。
⑷子程序结构。指子程序、函数、过程这类结构的定义和调用。
实习重点是哑实结合的方法。
⑸环结构。如计数循环、条件循环等。实习重点是循环化简的
方法。
⑹式语句。主要指输入输出语句的格式加工。
4.上机调试运行
在VC++中c语言环境下调试运行