您现在的位置是:主页 > news > 网站建设考试题/百度云资源搜索引擎入口
网站建设考试题/百度云资源搜索引擎入口
admin2025/4/29 8:42:21【news】
简介网站建设考试题,百度云资源搜索引擎入口,凡客之家推广平台,购物网路易一、完成功能 实现了对C—语的中间代码成,能够翻译包含维数组类型的变量可以作为函数参数,可以出现维数组类型的变量的代码,修正了部分语义分析阶段遗留的错误 二、实验环境 实验编写在 MacOS 系统下,使flex 2.5.35和bison 2.3…
一、完成功能
实现了对C—语的中间代码成,能够翻译包含维数组类型的变量可以作为函数参数,可以出现维数组类型的变量的代码,修正了部分语义分析阶段遗留的错误
二、实验环境
实验编写在 MacOS 系统下,使flex 2.5.35和bison 2.3编译通过并运。提交之前在ubuntu 16.04环境下编译通过并测试成功
//macOS下编译需要-ll参数而非-lfl参数,在提交前已将Makefile恢复为-lfl
三、 实现解释
3.1 操作值表示
这是中间代码的变量的数据结构,其中类型分别为临时变量,变量,即数,Label名,函数名,地址(于函数中传识别传地址),空类型。
其中空类型是为了防出现段错误加的,在优化中去去除包含该类型的代码。变量名和函数名和地址名均直接使代码中的名称,临时变量为t0,t1 …., label名为 l1,l2,l3…。
3.2 中间代码
http://www.biyezuopin.vip
中间代码的数据结构如上图,采双向链表记录全部代码,所有类型与书上给的中间代码指令致。
3.3 中间代码生成
在语义分析的同时进中间代码成,成式与书上的翻译模板致,此外为了实现要求3.2,实现了额外操作:
- 声明时加数组声明的中间代码
- 检测到多维数组时,对上维度的数组空间*位置得到偏移量,在原地址基础上加上偏移量得到新的地址
- 调⽤函数,压⼊变量时如果是数组变量,则直接压⼊数组的地址
- 在函数内部,若数组变量是本地声明,则要先取地址再操作,若是形参传则需再取地址
3.4 特殊思路
-
为了屏蔽掉带有结构体变量的代码,在语义分析之前直接扫描语法树来判断
-
实验中若遇到需要place = NULL的情况,则传kind = O_NULL的变量,先加进中间代码再通过优化去除
-
代码优化思路如下
-
扫描全部代码,去掉所有包含O_NULL的代码
-
创建个与临时变量数相等的数组,扫描全部代码,若遇到形如
“临时变量 := 即数” 或者 “临时变量 := 变量”
在数组中对应临时变量的位置中存相应即数或变量,删除此代码
-
扫描全部代码,对每个临时变量
如果 数组中该临时变量的位置不为空,则将该临时变量改为对应即数或变量。对所有算数表达式代码,如果其两个操作数均为即数,则将该值计算出来并将 原代码变为赋值代码
-
重复ii. iii.步骤直代码中不存在上述形式的代码。
-