Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

ast.cc

Go to the documentation of this file.
00001 #include <boost/spirit/core.hpp>
00002 #include <boost/spirit/actor/push_back_actor.hpp>
00003 
00004 #include "ast.h"
00005 #include "ifprintf.h"
00006 
00007 using namespace std;
00008 using namespace boost::spirit;
00009 using namespace AST;
00118 void Node::set_attribute(string attributeName, Node* child){
00119     printf("%s.%s = %s\n", this->name.c_str(), attributeName.c_str(), child->name.c_str());
00120     this->attributes[attributeName] = child;
00121 }
00126 void Node::set_attribute(string attributeName, string value){
00127     printf("%s.%s = %s\n", this->name.c_str(), attributeName.c_str(), value.c_str());
00128     this->attributes[attributeName] = new Leaf(value);
00129 }
00134 void Node::set_attribute(string attributeName, vector<Node*> vec_nodes){
00135     printf("%s.%s = %i\n", this->name.c_str(), attributeName.c_str(), vec_nodes.size());
00136     this->attributes[attributeName] = new List(vec_nodes);
00137 }
00142 AttributeProxy Node::operator[](string attributeName){
00143      return AttributeProxy(this, attributeName);
00144 }
00151 AttributeProxy Node::addAttribute(const char* attributeName){
00152     this->orderedAttributes.push_back(attributeName);
00153     return this->operator[](attributeName);
00154 }
00160 void Node::toASTFile(FILE* f){
00161     ifprintf(f, "%s\n", this->name.c_str());
00162     for(int i = 0; i < this->orderedAttributes.size(); i++){
00163         string attributeName = orderedAttributes[i];
00164         Node* node = this->attributes[attributeName];
00165         if( node == NULL)
00166             ifprintf(f, "%s NULL\n", attributeName.c_str());
00167         else {
00168             switch(node->nodeType){
00169                 case NODE_BRANCH: {
00170                     ifprintf(f, "%s {\n", attributeName.c_str());
00171                     indent();
00172                     this->attributes[attributeName]->toASTFile(f);
00173                     outdent();
00174                     ifprintf(f, "}\n");
00175                 }
00176                 break;
00177                 case NODE_LIST:{
00178                     List* listNode = (List*) node;
00179                     ifprintf(f, "%s [\n", attributeName.c_str());
00180                     indent();
00181                     for(int i = 0; i < listNode->list.size(); i ++){
00182                         Node* childNode = listNode->list[i];
00183                         ifprintf(f, "{\n");
00184                         indent();
00185                         listNode->list[i]->toASTFile(f);
00186                         outdent();
00187                         ifprintf(f, "}\n");
00188                     }
00189                     outdent();
00190                     ifprintf(f, "]\n");
00191                 }
00192                 break;
00193                 case NODE_LEAF:{
00194                     Leaf* leafNode = (Leaf*) node;
00195                     ifprintf(f, "%s %s\n", attributeName.c_str(), leafNode->value.c_str());
00196                 }
00197                 break;
00198                 case NODE_ID:{
00199                     Identifier* idNode = (Identifier*) node;
00200                     Leaf* idNodeHandle = (Leaf*) idNode->attributes["handle"];
00201                     ifprintf(f, "%s id:%s\n", attributeName.c_str(), idNodeHandle->value.c_str());
00202                 }
00203                 break;
00204                 case NODE_CONSTANT:{
00205                     Identifier* idNode = (Identifier*) node;
00206                     Leaf* idNodeType  = (Leaf*) idNode->attributes["type"];
00207                     Leaf* idNodeValue = (Leaf*) idNode->attributes["value"];
00208                     ifprintf(f, "%s const:%s:%s\n", attributeName.c_str(), idNodeType->value.c_str(), idNodeValue->value.c_str());
00209                 }
00210                 break;
00211             }
00212         }
00213     }
00214 }

Generated on Thu Oct 20 12:00:04 2005 for ASTree by  doxygen 1.4.2-20050421