• 大小: 164KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 编译原理  

资源简介

编制程序,完成局部优化过程中的基本块划分。给定一段代码,判定程序的入口语句,划分基本块,删除无用产生式和冗余节点。

资源截图

代码片段和文件信息

#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


评论

共有 条评论