0.简介
二元运算有很多,这里只用加法来举例子。
1.中间变量
在获得二元表达式的时候,要有中间结果在存储,所以要暗中处理中间结果。
一下是二元表达式计算中间代码的方法。
operand BinaryExpression::evaluation(std::vector<Quaternion>& stms, Memory& memory, NameTable& table)
{
operand result;
operand rightValue = right_expression->evaluation(stms, memory, table);
operand leftValue = left_expression->evaluation(stms, memory, table);
Token resType;
if (opt == TK_PLUS)
{
//类型判断
if (rightValue.type == KW_STRING || leftValue.type == KW_STRING)
{
//字符串不支持运算,报错
}
else if (rightValue.type == KW_INT || leftValue.type == KW_INT)
resType = KW_INT;
int addr = memory.malloc(4);
result = operand(resType,addr,true);
table.push(std::make_tuple(KW_INT,0,addr,"temp@"+addr));
stms.push_back(Quaternion(ADD,leftValue,rightValue,result));
}
return result;
}
2.结果
输入如下代码
int a;
int b = 99;
int c = 10;
b = a + b + c + 888;
简单分析一下
a,b,c分别是地址0,4,8
然后888与c相加存储在临时变量地址12的地方
b与地址12的数值相加,存储在临时变量地址16的地方
a与临时变量地址16相加,存储在临时变量地址20
最后将地址20的值赋给b