https://github.com/leozhang1/QtInterpreter这个链接 assignnode.h代码 展示
时间: 2023-09-26 10:07:06 浏览: 95
以下是 `assignnode.h` 文件的代码:
```c++
#ifndef ASSIGNNODE_H
#define ASSIGNNODE_H
#include "statementnode.h"
#include "variablenode.h"
#include "expressionnode.h"
class AssignNode : public StatementNode
{
public:
AssignNode(VariableNode* var, ExpressionNode* expr);
~AssignNode();
void execute();
private:
VariableNode* m_var;
ExpressionNode* m_expr;
};
#endif // ASSIGNNODE_H
```
`AssignNode` 是一个继承自 `StatementNode` 的类,用于表示赋值语句。它包含了一个 `VariableNode` 指针和一个 `ExpressionNode` 指针,分别表示赋值的目标变量和赋值的表达式。`execute()` 函数用于执行赋值操作。
相关问题
https://github.com/leozhang1/QtInterpreter这个链接 assignnode.cpp代码 展示
以下是 `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()` 函数,将栈顶两个元素弹出并存储到左子节点所表示的变量中。这样就完成了赋值操作的代码生成。
https://github.com/leozhang1/QtInterpreter这个链接的代码 展示
这个链接是一个基于Qt框架的解释器,可以解释执行简单的脚本语言。
如果你想要查看代码,可以按照以下步骤进行:
1. 首先,你需要在本地安装Git和Qt Creator。
2. 打开Qt Creator,选择“文件”->“新建文件或项目”。
3. 在弹出的对话框中,选择“从版本控制”->“Git”。
4. 在“存储库位置”中输入 https://github.com/leozhang1/QtInterpreter.git,并选择本地存储位置,然后点击“克隆”。
5. 克隆完成后,在Qt Creator中打开该项目并编译运行即可查看代码。
如果你只是想在线查看代码,可以直接在GitHub上浏览该项目的源代码。
阅读全文
相关推荐















