https://github.com/leozhang1/QtInterpreter这个链接 Expressionnode.cpp代码 展示
时间: 2023-12-20 22:06:26 浏览: 26
以下是 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 删除了它的左右子节点,以释放内存。