#include <node.hpp>
Public Member Functions | |
node () | |
node (double number) | |
node (std::string const &identifier) | |
node (node identifier, node number) | |
node (char op, node operand) | |
node (node left, char op, node right) | |
node (node const &n) | |
~node () | |
node & | operator= (node const &n) |
void | print (std::ostream &stream, int indent=0) const |
double | evaluate () const |
std::string | to_string () const |
Static Private Member Functions | |
static node_impl * | make_binary_operator (node, char, node) |
Factory function to make the binary operator nodes. | |
Private Attributes | |
node_impl * | pimpl_ |
Definition at line 15 of file node.hpp.
node::node | ( | ) |
node::node | ( | double | number | ) |
Construct a numeric node.
number | The number |
Definition at line 30 of file node.cpp.
00031 : pimpl_(new node_number(number)) 00032 {}
node::node | ( | std::string const & | identifier | ) |
Construct an identifier node.
identifier | The name of the identifier |
Definition at line 34 of file node.cpp.
00035 : pimpl_(new node_identifier(identifier)) 00036 {}
node::node | ( | char | op, | |
node | operand | |||
) |
Construct a binary operator node.
left | The left-hand parse-tree | |
op | The operator character, e.g., '*' | |
right | The right-hand operand |
Definition at line 46 of file node.cpp.
00047 : pimpl_(make_binary_operator(left, op, right)) 00048 {}
node::node | ( | node const & | n | ) |
node::~node | ( | ) |
Copy assignment operator decrements the reference count.
n | the source of the assignment |
Definition at line 55 of file node.cpp.
References node_impl::add_ref(), node_impl::del_ref(), and pimpl_.
00056 { 00057 n.pimpl_->add_ref(); 00058 pimpl_->del_ref(); 00059 pimpl_ = n.pimpl_; 00060 00061 return *this; 00062 }
void node::print | ( | std::ostream & | stream, | |
int | indent = 0 | |||
) | const |
Print a tree. For debugging, print a visual representation of the parse tree. Each level increments the indent
to make the tree structure evident.
stream | The output stream | |
indent | The indentation. |
Definition at line 64 of file node.cpp.
References pimpl_, and node_impl::print().
Referenced by node_divide::print_node(), node_multiply::print_node(), node_subtract::print_node(), node_add::print_node(), node_negate::print_node(), and node_assign::print_node().
double node::evaluate | ( | ) | const |
Evaluate a parse tree. Evaluate and tree and return the result.
Definition at line 70 of file node.cpp.
References node_impl::evaluate(), and pimpl_.
Referenced by BOOST_AUTO_TEST_CASE(), node_binary::evaluate_left(), node_unary::evaluate_operand(), node_binary::evaluate_right(), node_assign::evaluate_value(), and parse_loop().
std::string node::to_string | ( | ) | const |
Return a string representation. For an identifier node, return the identifier. For all other nodes, return a string representation of the evaluated value.
Definition at line 76 of file node.cpp.
References pimpl_, and node_impl::to_string().
Referenced by BOOST_AUTO_TEST_CASE(), and node_assign::get_identifier().
Factory function to make the binary operator nodes.
Definition at line 6 of file node.cpp.
00007 { 00008 if (op == '+') 00009 return new node_add(left, right); 00010 else if (op == '-') 00011 return new node_subtract(left, right); 00012 else if (op == '*') 00013 return new node_multiply(left, right); 00014 else if (op == '/') 00015 return new node_divide(left, right); 00016 else 00017 throw std::logic_error("fatal error in make_binary_opreator: unknown operator: " + op); 00018 }
node_impl* node::pimpl_ [private] |
Definition at line 79 of file node.hpp.
Referenced by evaluate(), node(), operator=(), print(), to_string(), and ~node().