https://github.com/leozhang1/QtInterpreter这个链接 varnode.cpp代码 展示
时间: 2023-10-08 15:04:52 浏览: 56
以下是 varnode.cpp 的代码:
```c++
#include "varnode.h"
VarNode::VarNode(QString name, VarType type, QObject *parent) :
QObject(parent), m_name(name), m_type(type)
{
}
void VarNode::setValue(QVariant value)
{
m_value = value;
emit valueChanged(m_value);
}
QString VarNode::name() const
{
return m_name;
}
VarNode::VarType VarNode::type() const
{
return m_type;
}
QVariant VarNode::value() const
{
return m_value;
}
```
这个类定义了一个变量节点(VarNode),包含了变量的名称、类型和值。setValue() 函数用于设置变量的值,并且发出 valueChanged 信号。其他函数用于获取变量的名称、类型和值。
相关问题
https://github.com/leozhang1/QtInterpreter这个链接 varnode.h代码 展示
以下是 varnode.h 的代码:
```c++
#ifndef VARNODE_H
#define VARNODE_H
#include <string>
#include <unordered_map>
using std::string;
using std::unordered_map;
class VarNode
{
public:
enum Type { INT, DOUBLE, STRING };
VarNode(Type type = INT, int ival = 0, double dval = 0.0, string sval = "");
Type type() const { return m_type; }
int intValue() const { return m_ival; }
double doubleValue() const { return m_dval; }
string stringValue() const { return m_sval; }
void setIntValue(int ival) { m_ival = ival; }
void setDoubleValue(double dval) { m_dval = dval; }
void setStringValue(string sval) { m_sval = sval; }
static Type typeFromString(const string& str);
private:
Type m_type;
int m_ival;
double m_dval;
string m_sval;
};
class VarTable
{
public:
VarTable() {}
bool isDefined(const string& name) const;
VarNode::Type getVarType(const string& name) const;
int getIntVar(const string& name) const;
double getDoubleVar(const string& name) const;
string getStringVar(const string& name) const;
void setIntVar(const string& name, int value);
void setDoubleVar(const string& name, double value);
void setStringVar(const string& name, const string& value);
void defineVar(const string& name, VarNode::Type type, int ival = 0, double dval = 0.0, string sval = "");
private:
unordered_map<string, VarNode> m_vars;
};
#endif // VARNODE_H
```
这个头文件声明了两个类,`VarNode` 和 `VarTable`。其中,`VarNode` 是一个简单的数据结构,表示一个变量。`VarTable` 是一个哈希表,用于存储各种类型的变量。该类提供了一些方法,可以获取和设置变量的值,以及判断变量是否已定义。同时,该类还提供了一个方法,用于在哈希表中定义一个新变量。
https://github.com/leozhang1/QtInterpreter这个链接 Expressionnode.cpp代码 展示
以下是 Expressionnode.cpp 的代码:
```cpp
#include "ExpressionNode.h"
#include <iostream>
using namespace std;
double NumberNode::eval()
{
return value;
}
void NumberNode::print()
{
cout << value;
}
BinaryOperatorNode::~BinaryOperatorNode()
{
delete left;
delete right;
}
double AdditionNode::eval()
{
return left->eval() + right->eval();
}
void AdditionNode::print()
{
cout << "(";
left->print();
cout << "+";
right->print();
cout << ")";
}
double SubtractionNode::eval()
{
return left->eval() - right->eval();
}
void SubtractionNode::print()
{
cout << "(";
left->print();
cout << "-";
right->print();
cout << ")";
}
double MultiplicationNode::eval()
{
return left->eval() * right->eval();
}
void MultiplicationNode::print()
{
cout << "(";
left->print();
cout << "*";
right->print();
cout << ")";
}
double DivisionNode::eval()
{
double denominator = right->eval();
if (denominator == 0)
{
throw runtime_error("Division by zero");
}
else
{
return left->eval() / denominator;
}
}
void DivisionNode::print()
{
cout << "(";
left->print();
cout << "/";
right->print();
cout << ")";
}
```
这个代码实现了四则运算的语法树节点。其中,NumberNode 表示一个数字节点,AdditionNode、SubtractionNode、MultiplicationNode、DivisionNode 表示加法、减法、乘法和除法节点。每个节点都有 eval() 方法,用于计算节点的值;还有一个 print() 方法,用于打印节点的表达式。其中,BinaryOperatorNode 是一个抽象类,它的派生类实现了二元运算节点的计算和打印。在析构函数中,BinaryOperatorNode 删除了它的左右子节点,以释放内存。