#ifndef __ABSTRACT_SYNTAX_TREE_H__ #define __ABSTRACT_SYNTAX_TREE_H__ #include "nasal_parser.h" class ast_tree_node { protected: int line; int type; std::list children; double num; public: ast_tree_node() { line=0; type=0; children.clear(); } void set_line(int _line) { line=_line; } void set_type(int _type) { type=_type; } int return_line() { return line; } int return_type() { return type; } int child_num() { int cnt=0; for(std::list::iterator i=children.begin();i!=children.end();++i) ++cnt; return cnt; } std::list& return_list() { return children; } void print_all_tree(int tabnum=0) { for(int i=0;i::iterator i=children.begin();i!=children.end();++i) { i->print_all_tree(tabnum+1); } for(int i=0;i::iterator i=children.begin(); sum=i->run()+(++i)->run(); return sum; } else if(type==__sub_operator) { double sum=0; std::list::iterator i=children.begin(); sum=i->run()-(++i)->run(); return sum; } else { for(std::list::iterator i=children.begin();i!=children.end();++i) std::cout<run()<=0;--i) { num+=acc*((double)(str[i]-'0')); acc*=10; } } else { num=0; double acc=1; double aff=0.1; for(int i=DotPlace+1;i<(int)str.length();++i) { num+=aff*((double)(str[i]-'0')); aff*=0.1; } for(int i=DotPlace-1;i>=0;--i) { num+=acc*((double)(str[i]-'0')); acc*=10; } } return; } }; #endif