第一范文网 - 专业文章范例文档资料分享平台

编译原理课程设计报告(一个完整的编译器)

来源:用户分享 时间:2025/7/21 8:24:01 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

3.5.1 功能 1.构建语义栈 2.重新导入二元式 3.获取动作序列 4.初始化四元式 5.获取动作序列位置

6.在已有动作序列的基础上生成四元式(自底向上) 7.输出四元式

8.四元式的预处理及优化

中间代码是高级程序语言中,各种语法成分的语义结构表示;它介于源语言和目标语言之间。中间代码设置的目的是便于编译的后期处理(优化和目标代码生成)。因此生成四元式是制作一个编译器必不可少的一环。

中间代码生成属于语义分析的阶段,中间代码是高级程序语言中,各种语法成分的语义结构表示,它介于源语言和目标语言之间。设置中间代码有以下三点好处:

1.便于进行与机器无关的代码优化工作。

2.是编译程序改变目标机更容易。

3.使编译程序的结构在逻辑上更为简单明确。

以中间语言为界面,编译前端和后端的接口更清晰。我设计的四元式生成器是在语法分析的基础上,直接获取动作序列,而后直接基于词法序列进行分析,采用了自底向上的LR0分析法,对于每一个作用域都生成唯一的四元式结构体数组,便于接下来中间代码的优化,作用域和作用域之间的四元式序列互不干扰。

45

3.5.2 数据结构

structfourelem {/*四元式结构*/ };

structspo {/*动作序列*/ };

spo sport[100]; char actid[20][10] =

{ \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\ ,\,\,\,\};/*枚举动作*/ int sem[1000];/*语义栈*/

四元式是一种更接近目标代码的中间代码形式。由于这种形式的中间代码便于优化处理,因此,在目前许多编译程序中得到了广泛的应用。 四元式实际上是一种“三地址语句”的等价表示。它的一般形式为: (op,arg1,arg2,result)

其中, op为一个二元 (也可是一元或零元)运算符;arg1,arg2分

int idact; char id1[15]; char id2[15]; type type1; type type2; char id3[15];

char name[15]; char value1[15]; float value2;

46

别为它的两个运算 (或操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算的结果将放入result中。四元式还可写为类似于PASCAL语言赋值语句的形式:

result ∶= arg1 op arg2

需要指出的是,每个四元式只能有一个运算符,所以,一个复杂的表达式须由多个四元式构成的序列来表示。例如,表达式A+B*C可写为序列

T1∶=B*C,T2∶=A+T1

其中,T1,T2是编译系统所产生的临时变量。当op为一元、零元运算符 (如无条件转移)时,arg2甚至arg1应缺省,即result∶=op arg1或 op result ;对应的一般形式为: (op,arg1,,result)或(op,,,result)

在实际产生的四元式中,op往往用一整型数表示 (操作符的代码),它可能附带有不止一种属性。例如,加运算可以分为定点加法和浮点加法两种,我们可用不同的整数值区分这两种加法。至于四元式中运算对象arg1、arg2和结果域result,它们可以是指向符号表中某项的指示字,也可以是某个临时变量的序号,因此,在实际的翻译过程中,还需要进行相应的查填符号表工作。 四元式类型定义如上所述:

其中idact为动作编号,四元式中的每一个对象都用Token类型表示,这样做的目的是利于四元式在机内的连续存储,而后的id1,id2,id3则很容易清楚其对应着四元式的后三项,其中type1和type2为枚举类型,这是为了再符号表生成之外确定好四元式的结构构成,这样的好处就是在生成目标代码时会有一定方便。

47

3.5.3流程图

开始读取第一个动作序列从文件中读取动作序列动作序列已读完?否是读取下一个单词将操作数压栈否是动作序列吗?是根据动作序列弹出操作数,构建四元式将获得的四元式输出到文件中结束

3.5.4算法

voidinitact();/*初始化四元式*/ intact();/*获取动作序列位置*/ voidactanalysis();/*生成四元式*/ voidprintact();/*输出打印四元式*/

48

编译原理课程设计报告(一个完整的编译器).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0qp3z8s6p477t6k14pg60zn011oo6h01akg_12.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top