diff options
author | Adrian Kummerländer | 2013-01-05 22:04:23 +0100 |
---|---|---|
committer | Adrian Kummerländer | 2013-01-05 22:04:23 +0100 |
commit | e3081360c65eb4994e7e8042898cec72de0d560b (patch) | |
tree | 2cac723733c674381ccaf32df5a64fe23b026467 /src/tree.h | |
parent | 0ab1ad8c67ac5579e10104f53040d962a7f98f17 (diff) | |
download | SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.tar SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.tar.gz SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.tar.bz2 SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.tar.lz SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.tar.xz SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.tar.zst SimpleParser-e3081360c65eb4994e7e8042898cec72de0d560b.zip |
Folder structure change; Further improvements of parser code
Diffstat (limited to 'src/tree.h')
-rw-r--r-- | src/tree.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/tree.h b/src/tree.h new file mode 100644 index 0000000..4177098 --- /dev/null +++ b/src/tree.h @@ -0,0 +1,80 @@ +#ifndef PARSER_NODE_H_ +#define PARSER_NODE_H_ + +#include <vector> +#include <string> +#include <sstream> +#include <memory> +#include <cmath> + +namespace SimpleParser { + +enum NodeType { + OPERAND_NODE, + OPERATOR_NODE, +}; + +class Node { + public: + virtual ~Node() {}; + + virtual double solve() = 0; + virtual NodeType getType() = 0; + virtual std::string print() = 0; + + Node* leftChild; + Node* rightChild; +}; + +class OperatorNode: public Node { + public: + explicit OperatorNode(char); + + virtual double solve(); + virtual NodeType getType(); + virtual std::string print(); + + char getFunction(); + + private: + char function_; +}; + + +class OperandNode: public Node { + public: + explicit OperandNode(double); + + virtual double solve(); + virtual NodeType getType(); + virtual std::string print(); + + private: + double value_; +}; + +class Tree { + public: + void setRoot(Node*); + double solve(); + + Node* addOperand(Node**, double); + Node* addOperator(Node**, char); + + std::string print(std::string); + + private: + Node* root_node_; + std::vector<std::unique_ptr<Node>> node_collection_; +}; + +class divide_exception: public std::exception { + virtual const char* what() const throw() + { + return "A divison through zero had to be prevented by the parser - check your input term."; + } +}; + +} + +#endif // PARSER_NODE_H_ |