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

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

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

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

输入样例:
在这里给出一组输入。例如:

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

输出样例:
在这里给出相应的输出。例如:

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

作者: sdutacm
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

/*******************
此程序将三元式代码翻译为汇编语言代码。
*******************/
#include <bits/stdc++.h>
using namespace std;
char s[100][100];
char reg[101];
int n,m,mm = 0;
int is_register(char ch)
{for(int i = 0; i < m; i++){if(ch == reg[i]){return i;}}return -1;
}
int last_use(int r,char ch)
{for(int  i = r; i < n; i++){if(ch == s[i][3]||ch == s[i][5])return i;}return n;
}
int get_register(int r)
{if(mm < m)return mm++;int f = -1,ans = -1;for(int i = 0; i < m; i++){int v = last_use(r,reg[i]);if(v > ans){ans = v;f = i;}}return f;
}
void print1(char ch)
{if(ch == '+')printf("ADD ");else if(ch == '-')printf("SUB ");else if(ch == '*')printf("MUL ");else if(ch == '\\')printf("DIV ");
}
void print2(char ch)
{int r = is_register(ch);if(r != -1)printf("R%d\n",r);else printf("%c\n",ch);
}
int main()
{cin>>n>>m;for(int i = 0; i < n; i++){cin>>s[i];}for(int i = 0; i < n; i++){int r = is_register(s[i][3]);if(r == -1){r = get_register(i);if(reg[r] != '\0'&&last_use(i,reg[r]) < n){printf("ST R%d, %c\n",r,reg[r]); ///把寄存器r里面的东东弄到内存里去reg[r] = NULL;}printf("LD R%d, %c\n",r,s[i][3]);}print1(s[i][4]);printf("R%d, ",r);print2(s[i][5]);reg[r] = s[i][0];}return 0;
}

7-5 简单的代码生成程序-A (10 分)相关推荐

  1. P:简单的代码生成程序

    简单的代码生成程序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 通过三地址代码序列 ...

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

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

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

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

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

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

  5. 提升代码可读性的 10 个技巧

    具有较强可读性的代码,能帮助你调试程序,不让自己活得太累. 代码可读性是计算机编程领域中普遍存在的问题.这也是我们成为开发者首先要学习的事情之一.本文会详细介绍在编写强可读性代码时最佳实践中最重要的一 ...

  6. 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 ...

  7. 提高编写CSS代码效率的10个习惯

    提高编写CSS代码效率的10个习惯 1.保持一贯性. 就像其它的任何事一样,值得一直保持一贯性.保持连贯性,而不是想到什么就给id和class命名什么. CSS的级联样式有利于加深你的记忆,而且充分利 ...

  8. Golang实践录:简单的代码片段

    本文列出简单的代码片段及基础知识. 简单说明 包 import的包从src算,如果在子目录,一定要添加子目录路径.如import "a",则a一定在src目录下. 同一个目录只能有 ...

  9. html国庆节代码,小程序10行代码实现微信头像挂红旗,国庆节个性化头像

    最近朋友圈里经常有看到这样的头像 既然这么火,大家要图又这么难,作为程序员的自己当然要自己动手实现一个. 老规矩,先看效果图 仔细研究了下,发现实现起来并不难,核心代码只有下面10行. wx.canv ...

最新文章

  1. 详细介绍Java和C++区别
  2. 登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$
  3. 怎样把本软件是否注册的标志加在程序里?(注:不想加在数据库里)
  4. AIX系统相关的日常操作
  5. 高一数学集合知识点整理_高一数学知识点总结
  6. PHP学习笔记03:简单网上调查站点
  7. 庆祝我的第一个WebGis完成-c#+MapXtreme2004
  8. JS控制图片滚动的效果
  9. 基于spring多数据源动态调用及其事务处理
  10. python新手入门代码-Python 新手入门习题及代码
  11. 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结
  12. 虚拟串口 VSPD 的使用
  13. 关于 IoT 的发展
  14. WIN10在服务器上找不到共享打印机,win10搜索不到共享打印机怎么办
  15. sql转置两种实现方式记录
  16. useragent怎么获取
  17. JVM内存模型是什么?
  18. npm插件开发-Vue插件
  19. 按钮在 IE 中两边被拉伸的BUG
  20. 利用python爬取微博热搜并进行数据分析

热门文章

  1. python辅助脚本教程_[Python] 用python做一个游戏辅助脚本,完整思路
  2. weex默认的flex布局_CSS flex布局入门
  3. 机器学习入门笔记(三):K近邻算法
  4. AcWing1085.不要62(数位DP)题解
  5. 均分纸牌模型之mxj分礼物
  6. P1181 数列分段Section I
  7. Python Profiler 列举
  8. windows 终端查看python位置
  9. R语言正则表达式[stringr package]
  10. http和websocket共用同一端口