编译原理实验六—代码优化

本文介绍了编译原理实验中关于代码优化的部分,重点在于基本块优化和循环优化。通过上机实习,作者加深了对代码优化的理论理解,并应用DAG进行基本块优化。目前,作者已实现了一个初步的代码优化模拟,尽管还有待改进和优化。
摘要由CSDN通过智能技术生成

实验目的:

1. 通过上机实习,加深对代码优化的理解,掌握基本块优化、循环优化的方法。 

2.  掌握利用 DAG 进行基本块优化的技术。 



坑....闷头写了两天总算模拟出了个能跑得起来的差不多的代码,里面还有很多地方可以优化,函数和结构都有很多....先懒着这样吧

实现代码(待改进版)

#include<bits/stdc++.h>
#define PB push_back
using namespace std;
char opera[10]={'=','+','-','*','/','_'};
int n;
int cnt;
map<string,int> mp;
//该变量或常量所对应的结点编号
map<int,int> numbermp;
//该数字对应的结点编号

/*
Solved:
1.多变量对应同一常量
2.根据变量的值计算另一个变量的值

*/

struct Tac{
    string str;        //四元式的完整式子
    int id;            //序号
    int operation;    //操作
    string op1;        //操作数1
    int num1;        //若操作数1为数字
    string op2;        //操作数2
    int num2;        //若操作数2为数字
    string res;        //结果
    int ans;        //若结果为数字
}t[100];


struct node{
    int id;            //结点序号
    int operation;    //操作
                    
    int type;        //type=0:常量num,type=1:变量var
    int num;        //结点若代表常量
    vector<string> var;    
                    //若结点代表变量
    int lchild;        //左。右孩子序号
    int rchild;
    
    bool operator < (const node& y) const{
        return id<y.id;
    }
    
    node(){
        id = 0;
        operation = 0;
        type = 0;
        num = 0;
        var.clear();
        lchild = 0;
        rchild = 0;
    }
};
vector<node> Dag;


//vector<node> nd;

void debug(){
    for(int i = 1;i < n; i++){
        cout<<t[i].str<<' '<<t[i].id<<' '<<t[i].op1<<' '<<opera[t[i].operation]<<' '<<t[i].op2<<' '<<t[i].res<<endl;
    }
}
void superdebug(){
    for(int i = 0 ; i < Dag.size();i++){
        cout<<"id = "<<Dag[i].id<<" type = "<<Dag[i].type<<" num = "<<Dag[i].num;
        cout<<" var_num = "<<Dag[i].var.size()<<" first_var = "<<Dag[i].var[0];
        cout<<" lc = "<<Dag[i].lchild<<&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值