#include <node.hpp>
Public Member Functions | |
node () | |
node (std::istream &stream) | |
node (double number) | |
node (std::string const &identifier) | |
node (char op, node operand) | |
node (node left, char op, node right) | |
node (identifier_list const ¶meters, node definition) | |
node (std::string const &name, node_list const &arguments) | |
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 |
identifier_list const & | get_parameters () const |
void | save (std::ostream &stream) 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 25 of file node.hpp.
node::node | ( | ) |
node::node | ( | std::istream & | stream | ) |
Construct a node by reading from a library file.
Definition at line 26 of file node.cpp.
00027 : pimpl_(node_impl::read_node(stream)) 00028 {}
node::node | ( | double | number | ) |
Construct a numeric node.
number | The number |
Definition at line 36 of file node.cpp.
00037 : pimpl_(new node_number(number)) 00038 {}
node::node | ( | std::string const & | identifier | ) |
Construct an identifier node.
identifier | The identifier |
Definition at line 40 of file node.cpp.
00041 : pimpl_(new node_identifier(identifier)) 00042 {}
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 48 of file node.cpp.
00049 : pimpl_(make_binary_operator(left, op, right)) 00050 {}
node::node | ( | identifier_list const & | parameters, | |
node | definition | |||
) |
Construct a function definition node.
parameters | The list of all the parameter names | |
definition | The function definition |
Definition at line 52 of file node.cpp.
00053 : pimpl_(new node_function(parameters, definition)) 00054 {}
node::node | ( | std::string const & | name, | |
node_list const & | arguments | |||
) |
Construct a function call node.
name | The function name | |
arguments | The function arguments |
Definition at line 56 of file node.cpp.
00057 : pimpl_(new node_function_call(name, arguments)) 00058 {}
node::node | ( | node const & | n | ) |
node::~node | ( | ) |
Copy assignment operator decrements the reference count.
n | the source of the assignment |
Definition at line 65 of file node.cpp.
References node_impl::add_ref(), node_impl::del_ref(), and pimpl_.
00066 { 00067 n.pimpl_->add_ref(); 00068 pimpl_->del_ref(); 00069 pimpl_ = n.pimpl_; 00070 00071 return *this; 00072 }
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 74 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_function::print_node().
double node::evaluate | ( | ) | const |
Evaluate a parse tree. Evaluate and tree and return the result.
Definition at line 80 of file node.cpp.
References node_impl::evaluate(), and pimpl_.
Referenced by BOOST_AUTO_TEST_CASE(), node_binary::evaluate_left(), node_function_call::evaluate_node(), node_function::evaluate_node(), node_identifier::evaluate_node(), node_unary::evaluate_operand(), node_binary::evaluate_right(), and parser::get_statement().
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 86 of file node.cpp.
References pimpl_, and node_impl::to_string().
Referenced by BOOST_AUTO_TEST_CASE().
identifier_list const & node::get_parameters | ( | ) | const |
Return a list of parameter names. Most node return a reference to a global, static, const, empty list. Only function nodes return a list of parameters.
Definition at line 92 of file node.cpp.
References node_impl::get_parameters(), and pimpl_.
Referenced by node_function_call::evaluate_node(), and get_variable().
00094 { 00095 return pimpl_->get_parameters(); 00096 }
void node::save | ( | std::ostream & | stream | ) | const |
Save the node to a stream.
stream | The output stream |
Definition at line 98 of file node.cpp.
References pimpl_, and node_impl::save().
Referenced by node_divide::save_node(), node_multiply::save_node(), node_subtract::save_node(), node_add::save_node(), node_negate::save_node(), and node_function::save_node().
Factory function to make the binary operator nodes.
Definition at line 8 of file node.cpp.
00009 { 00010 if (op == '+') 00011 return new node_add(left, right); 00012 else if (op == '-') 00013 return new node_subtract(left, right); 00014 else if (op == '*') 00015 return new node_multiply(left, right); 00016 else if (op == '/') 00017 return new node_divide(left, right); 00018 else 00019 throw calc_error("fatal error in make_binary_opreator: unknown operator: " + op); 00020 }
node_impl* node::pimpl_ [private] |
Definition at line 106 of file node.hpp.
Referenced by evaluate(), get_parameters(), node(), operator=(), print(), save(), to_string(), and ~node().