https://github.com/leozhang1/QtInterpreter这个链接 assignnode.cpp代码 展示
时间: 2023-10-08 08:04:52 浏览: 82
https://github.com/PlayVoice/so-vits-svc 预训练文件
以下是 `assignnode.cpp` 的代码:
```cpp
#include "assignnode.h"
#include "type.h"
#include "exception.h"
AssignNode::AssignNode(Node* left, Node* right)
:BinaryOperatorNode(left, right)
{
}
Type AssignNode::typeCheck()
{
Type leftType = left()->typeCheck();
Type rightType = right()->typeCheck();
if (leftType == rightType)
return leftType;
else
throw new Exception("Type mismatch in assignment");
}
void AssignNode::codegen(InstructionsClass& machineCode)
{
left()->codegen(machineCode);
right()->codegen(machineCode);
machineCode.PopPopStore();
}
```
该代码实现了赋值操作的语法树节点,它派生自 `BinaryOperatorNode` 类,表示一个二元运算符节点。`AssignNode` 类的构造函数接受左右两个子节点,即等号左边和右边的表达式。
在 `typeCheck()` 函数中,首先获取左右子节点的类型,然后判断它们是否相同。如果不同,则抛出类型不匹配的异常。
在 `codegen()` 函数中,首先生成左子节点的代码,将其计算结果压入栈中。然后生成右子节点的代码,将其计算结果也压入栈中。最后调用 `PopPopStore()` 函数,将栈顶两个元素弹出并存储到左子节点所表示的变量中。这样就完成了赋值操作的代码生成。
阅读全文