考研 408 × 求职面试
知识点 · 编译原理 · 基础
每日一题 · 编译原理
解析
面试小贴士 · 编译原理
代码实现 · C++
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
struct Instr { string op, arg1, arg2, res; };
int main() {
// 前端:将 (a+b)*c 生成为三地址码 IR
vector<Instr> ir = {
{"+", "a", "b", "t1"},
{"*", "t1", "c", "t2"}
};
unordered_map<string,int> env = {{"a",2},{"b",3},{"c",4}};
// 后端:基于 IR 做简单求值(真实后端会生成目标代码)
for (auto &in : ir) {
int v1 = env[in.arg1], v2 = env[in.arg2];
if (in.op == "+") env[in.res] = v1 + v2;
else if (in.op == "*") env[in.res] = v1 * v2;
}
cout << "result=" << env["t2"] << endl; // 20
}