资源简介
编制程序,完成局部优化过程中的基本块划分。给定一段代码,判定程序的入口语句,划分基本块,删除无用产生式和冗余节点。
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
/********************************************************************/
/* Deceleration of structures */
/********************************************************************/
struct Four{
string op; // 操作符
string arg1; // 第一个操作数
string arg2; // 第二个操作数
string result; // 结果
int stylenum; // 结点类型
struct Four *next; // 指向下一条语句的起始位置
struct Four *last; // 指向上一条语句的起始位置
};
struct DagNode{
string bsf; // 标识符
string var; // 副标识符
int flag; // 标记位
struct DagNode *lchild; // 指向孩子的指针
struct DagNode *rchild; // 指向右孩子的指针
struct DagNode *next; // 指向下一个结点
};
/********************************************************************/
/* Global variables */
/********************************************************************/
Four *fhead;
DagNode *nhead;
std::list list_Dag;
vector input_source; //模板函数
/********************************************************************/
/* implementation of functions */
/********************************************************************/
void do_input()
{
// 第五个测试用例 结合实验3的输出结果
input_source.push_back(“/32t1“);
input_source.push_back(“ t1 a“);
input_source.push_back(“+s8t2“);
input_source.push_back(“ t2 b“);
}
void DataFour() // 建立四元式的结构映射
{
struct Four *fourTmp = new Four;
fourTmp->last = NULL;
fourTmp->next = NULL;
//for(//----------1补充条件)
for(int i=0;i< input_source.size();i++)
{
struct Four *pp = new Four;
pp->next = NULL;
pp->last = fourTmp;
fourTmp->next = pp;
if(!pp) //内存分配失败
{
cout<<“Memory allocation failed!“< return;
}
char op[10]={0};
char arg1[10]={0};
char arg2[10]={0};
char result[10]={0};
sscanf(input_source[i].c_str()“%[^]%[^]%[^]%[^\n]“ oparg1arg2result); // sscanf() - 从一个字符串中读进与指定格式相符的数据
pp->op=op;
pp->arg1=arg1;
pp->arg2=arg2;
pp->result=result;
if(pp->arg2 == “ “)
if(pp->op == “ “)
//----------2补充语句 //第二个操作数为空并且操作符为空,则为0型四元式
pp->stylenum=0;
else
//----------3补充语句 //第二个操作数为空并且操作符不空,则为1型四元式
pp->stylenum=1;
else
//----------4补充语句 //第二个操作数不为空,则为2型四元式
pp->stylenum=2;
fourTmp = pp;
}
fhead = fourTmp;
}
void ListBuild() // 建立链表
{
for(int i = 1; fhead->last != NULL; fhead = fhead->last) //从最后一个四元式开始构造链表
{
DagNode *tmp1 = new DagNode;
DagNode *tmp2 = new DagNode;
DagNode *tmpResult = new DagNode;
tmp1->lchild = NULL;
tmp1->rchild = NULL;
tmp1->next = NULL;
tmp2->lchild = NULL;
tmp2->rchild = NULL;
tmp2->next = NULL;
tmpResult->lchild = NULL;
tmpResult->rchild = NULL;
tmpResult->next = NULL;
nhead = new DagNode;
nhead->next =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7059 2014-06-10 10:32 中间代码优化\中间代码优化.cpp
文件 101853 2014-06-04 21:49 中间代码优化\中间代码优化.docx
文件 153088 2014-06-10 11:02 中间代码优化\中间代码优化实验报告.doc
目录 0 2014-06-10 13:34 中间代码优化
----------- --------- ---------- ----- ----
262000 4
- 上一篇:chars-动态刷新.zip
- 下一篇:51单片机多功能电子时钟代码
相关资源
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
- 华工往年编译原理试卷
- 编译原理课程设计for循环LR法三元式
- 哈工程-编译原理课程设计(2016级)
- 龙书《编译原理》(Compilers:Principle
- 编译原理复习题
- 天津理工大学编译原理实验2
- 程序设计语言编译原理_陈火旺_第3版
- 编译原理CP lab实验报告.doc
- 编译原理.zip
- 编译原理基础习题与上机题解答
- LR0分析表自动生成程序_界面输入产生
- 编译原理与实践课后习题答案中文英
- 编译原理_第二版_(陈意云_著)_高等
评论
共有 条评论