简单的代码生成程序

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有 > 空寄存器 > 内存中存有 > 以后不再使用 > 最远距离使用

Input

单组输入,给定输出的三地址代码的个数和寄存器的个数.所有的变量为大写字母,寄存器的数量不超过9

Output

参照示例格式输出,不需要将最后的寄存器中的值写回内存

不再使用变量不用写回内存

Sample Input

4 2
T:=A-B
U:=A-C
V:=T+U
W:=V+U

Sample Output

LD R0, A
SUB R0, B
LD R1, A
SUB R1, C
ADD R0, R1
ADD R0, R1

Hint

Source

#include<bits/stdc++.h>
using namespace std;
int num;//寄存器使用的数量
int n , m;
char R[110];//寄存器
string s[110];//表达式
void PrintOperation(char c)
{if(c=='-')cout << "SUB ";if(c=='+')cout << "ADD ";if(c=='*')cout << "MUL ";if(c=='/')cout << "DIV ";
}
int Judge(char c)
{//判断变量是否在寄存器中for(int i = 0;i<m;i++)if(R[i]==c) return i;return -1;
}
int RecentUse(int pos , char c)
{//从当前表达式向后判断,是否有变量早已存在寄存器中for(int i = pos ;i< n ;i++)if(s[i][3]==c || s[i][5]==c)return i;return n;
}
int Find(int pos)
{//寄存器有空余if(num < m) return num++;//寄存器已满int ii  = -1, jj = -1;//判断这些寄存器中哪些存的变量是最远才使用的for(int i = 0 ; i<m ;i++){int k = RecentUse(pos, R[i]);if(k>jj) jj = k, ii = i;}return ii;
}
void PrintSecond(char c)
{int pos = Judge(c);if(pos != -1)printf("R%d\n",pos);elseprintf("%c\n",c);
}
int main()
{memset(R,0,sizeof(R));num = 0;int pos;//游标cin >> n >> m;getchar();for(int i =0 ;i<n;i++)cin >> s[i];for(int i = 0;i<n;i++){pos = Judge(s[i][3]);if(pos==-1){//变量1不在寄存器中pos = Find(i);//如果找到的位置,寄存器已存入变量,且后面的表达式中可能用到这个变量if(R[pos] && RecentUse(i,R[pos]) < n )printf("ST R%d, %c\n",pos,R[pos]);//存入内存printf("LD R%d, %c\n",pos,s[i][3]);}//输出操作符PrintOperation(s[i][4]);printf("R%d, ",pos);PrintSecond(s[i][5]);R[pos]=s[i][0];}return 0;
}

P:简单的代码生成程序相关推荐

  1. 7-5 简单的代码生成程序-A (10 分)

    7-5 简单的代码生成程序-A (10 分) 通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有 > 空寄存器 > 内存中存有 > 以后不再使用 ...

  2. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  3. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

  4. Unity 简单示例代码和向导/Unity Aplication Block

    Unity 简单示例代码和向导 关于Unity 的说明和下载地址,请访问[微软控制反转和依赖注入容器Unity 1.0发布] http://forum.entlib.com/Default.aspx? ...

  5. 用VB6写的一个简单俄罗斯方块代码

    网络上有很多俄罗斯方块代码.它们大都为了视觉效果,程序比较复杂,不利于学习游戏编程.所以我写了个简单俄罗斯方块代码,尽量用VB本身的功能,没有复杂的DirectX. 下载(注意修改下载后的扩展名) m ...

  6. 原生js写三级联动 java_原生js三级联动的简单实现代码

    本文实例为大家分享了js查询天气应用,供大家参考,具体内容如下 实现功能:打开网页时显示用户所在城市的天气状况,在输入框输入城市可查询其它城市. 实现过程:先调用百度地图的API来获取用户所在的城市, ...

  7. python的代码有哪些_简单python代码类型有哪些?

    简单python代码类型有哪些? 简单python代码类型有: 1.[背景] 最近,派大星想要减肥,他决定控制自己的饮食,少吃一点蟹黄堡. 海绵宝宝为了帮助好朋友派大星,和派大星一起制定了一个饮食游戏 ...

  8. ul、li列表简单实用代码实例

    利用ul和li可以实现列表效果,下面就是一个简单的演示. 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  9. webpack和react_使用React和Webpack进行简单的代码拆分

    webpack和react by Didier FRANC 由Didier FRANC 使用React和Webpack进行简单的代码拆分 (Straightforward code splitting ...

最新文章

  1. 关于Android Service真正的完全详解,你需要知道的一切
  2. fpga运算服务器_一张图了解CPU、GPU、ASIC、FPGA性能、功耗效率、灵活性
  3. Linux select 一网打尽
  4. Mysql学习总结(66)——设置MYSQL数据库编码为UTF-8
  5. 学Python就能做好数据分析?万能语言背后是一片韭菜地
  6. 山东自考c语言程序设计停考了吗,山东省自考教育类停考专业遗留问题的通知...
  7. 优雅地减少redux请求样板代码
  8. Oracle DBLINK 简单使用
  9. SpringBoot SSM 心理咨询论坛社区
  10. 华为harmonyos官方微博账号,华为 EMUI 官方微信和微博更名为 HarmonyOS
  11. 设计不难学,这10款软件总有一款适合你
  12. 什么是死亡之 Ping 攻击?
  13. 项目管理的方法论 一
  14. 网页飘窗效果,jsp页面飘窗浮窗,html飘窗浮窗,点叉号关闭飘窗
  15. html css图标怎么跟文字并排,科技常识:css图标与文字对齐的两种实现方法
  16. 奋斗吧,程序员——第四十六章 此情可待成追忆,只是当时已惘然
  17. 【面经】数据分析岗_面试题整理总结(持续更新中…)
  18. 2020有道翻译 使用付费api
  19. Python基本手册
  20. 技嘉B360M Aorus Pro小主板配置简介

热门文章

  1. Task5 基于深度学习的文本分类
  2. c语言 李敬兆 课后答案,C语言程序设计习题与实验指导
  3. 树莓派系统配置-raspi-config
  4. 苹果怎么使用计算机,查找我的iphone怎么用 查找我的iPhone电脑版使用教程
  5. 智慧城市PPP模式备受青睐
  6. 低代码专题报告合辑(精选七篇) 附下载
  7. 2021阿里巴巴研发效能峰会干货集(PPT+视频+白皮书+案例)
  8. Android消息提示框及CheckBox组件
  9. idea 文件夹样式更改插件地址
  10. python API 源码