简单的代码生成程序
#include <bits/stdc++.h>
using namespace std;
char p[100];
char s[100][100];
int n ,m, top = 0;
int get(char ch)
{
for(int i = 0; i < m ; i++)
{
if(ch == p[i])
return i;
}
return -1;
}
int use(int x, char ch)
{
for(int i = x; i < n; i++)
{
if(ch == s[i][3] || ch == s[i][5])
return i;
}
return n;
}
int find(int x)
{
if(top < m) return top++;
int t = -1;
int ans = -1;
for(int i = 0; i < m; i++)
{
int k = use(x, p[i]);
if(k > ans)
{
t = i;
ans = k;
}
}
return t;
}
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 x = get(ch);
if(x != -1)
{
printf("R%d\n", x);
}
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 x = get(s[i][3]);
if(x == -1)
{
x = find(i);
if(p[x] != '\0' && use(i,p[x]) < n)
{
printf("ST R%d, %c\n", x, p[x]);
p[x] = NULL;
}
printf("LD R%d, %c\n", x, s[i][3]);
}
print1(s[i][4]);
printf("R%d, ", x);
print2(s[i][5]);
p[x] = s[i][0];
}
return 0;
}