您现在的位置是:主页 > news > 网站建设考试题/百度云资源搜索引擎入口

网站建设考试题/百度云资源搜索引擎入口

admin2025/4/29 8:42:21news

简介网站建设考试题,百度云资源搜索引擎入口,凡客之家推广平台,购物网路易一、完成功能 实现了对C—语的中间代码成,能够翻译包含维数组类型的变量可以作为函数参数,可以出现维数组类型的变量的代码,修正了部分语义分析阶段遗留的错误 二、实验环境 实验编写在 MacOS 系统下,使flex 2.5.35和bison 2.3…

网站建设考试题,百度云资源搜索引擎入口,凡客之家推广平台,购物网路易一、完成功能 实现了对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.步骤直代码中不存在上述形式的代码。

3.5 运行效果