Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

CCodeGeneratorVisitor Class Reference

#include <ccodegeneratorvisitor.h>

Inheritance diagram for CCodeGeneratorVisitor:

Inheritance graph
[legend]
Collaboration diagram for CCodeGeneratorVisitor:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual ~CCodeGeneratorVisitor ()
VisitorReturnvisitAction (Action *action)
VisitorReturnvisitActStatement (ActStatement *actStatement)
VisitorReturnvisitArrayReference (ArrayReference *arrayReference)
VisitorReturnvisitArrayType (ArrayType *arrayType)
VisitorReturnvisitAssignStatement (AssignStatement *assignStatement)
VisitorReturnvisitAst (Ast *ast)
VisitorReturnvisitBehavior (Behavior *behavior)
VisitorReturnvisitBehaviorStatement (BehaviorStatement *behaviorStatement)
VisitorReturnvisitBinaryExpression (BinaryExpression *binaryExpression)
VisitorReturnvisitDeclaration (Declaration *declaration)
VisitorReturnvisitDoStatement (DoStatement *doStatement)
VisitorReturnvisitExpression (Expression *expression)
VisitorReturnvisitExpressionList (ExpressionList *expressionList)
VisitorReturnvisitFieldDeclaration (FieldDeclaration *fieldDeclaration)
VisitorReturnvisitFieldReference (FieldReference *fieldReference)
VisitorReturnvisitFieldType (FieldType *fieldType)
VisitorReturnvisitGuard (Guard *guard)
VisitorReturnvisitGuardedStatement (GuardedStatement *guardedStatement)
VisitorReturnvisitGuardExpression (GuardExpression *guardExpression)
VisitorReturnvisitGuardReceive (GuardReceive *guardReceive)
VisitorReturnvisitGuardTimeout (GuardTimeout *guardTimeout)
VisitorReturnvisitIdentifier (Identifier *identifier)
VisitorReturnvisitIdentifierList (IdentifierList *identifierList)
VisitorReturnvisitIfStatement (IfStatement *ifStatement)
VisitorReturnvisitImport (Import *import)
VisitorReturnvisitIntegerLiteral (IntegerLiteral *integerLiteral)
VisitorReturnvisitLeftSide (LeftSide *leftSide)
VisitorReturnvisitLeftSideList (LeftSideList *leftSideList)
VisitorReturnvisitMessage (Message *message)
VisitorReturnvisitMultipleArrayReference (MultipleArrayReference *multipleArrayReference)
VisitorReturnvisitProcess (Process *process)
VisitorReturnvisitProgram (Program *program)
VisitorReturnvisitRangeType (RangeType *rangeType)
VisitorReturnvisitReceiveStatement (ReceiveStatement *receiveStatement)
VisitorReturnvisitSendStatement (SendStatement *sendStatement)
VisitorReturnvisitSequentialAction (SequentialAction *sequentialAction)
VisitorReturnvisitSequentialBehavior (SequentialBehavior *sequentialBehavior)
VisitorReturnvisitSequentialDeclaration (SequentialDeclaration *sequentialDeclaration)
VisitorReturnvisitSequentialExpressionList (SequentialExpressionList *sequentialExpressionList)
VisitorReturnvisitSequentialFieldDeclaration (SequentialFieldDeclaration *sequentialFieldDeclaration)
VisitorReturnvisitSequentialGuardedStatement (SequentialGuardedStatement *sequentialGuardedStatement)
VisitorReturnvisitSequentialIdentifierList (SequentialIdentifierList *sequentialIdentifierList)
VisitorReturnvisitSequentialImport (SequentialImport *sequentialImport)
VisitorReturnvisitSequentialLeftSideList (SequentialLeftSideList *sequentialLeftSideList)
VisitorReturnvisitSequentialMessage (SequentialMessage *sequentialMessage)
VisitorReturnvisitSequentialProcess (SequentialProcess *sequentialProcess)
VisitorReturnvisitSequentialStatement (SequentialStatement *sequentialStatement)
VisitorReturnvisitSimpleAction (SimpleAction *simpleAction)
VisitorReturnvisitSimpleArrayReference (SimpleArrayReference *simpleArrayReference)
VisitorReturnvisitSimpleBehavior (SimpleBehavior *simpleBehavior)
VisitorReturnvisitSimpleDeclaration (SimpleDeclaration *simpleDeclaration)
VisitorReturnvisitSimpleExpressionList (SimpleExpressionList *simpleExpressionList)
VisitorReturnvisitSimpleFieldDeclaration (SimpleFieldDeclaration *simpleFieldDeclaration)
VisitorReturnvisitSimpleGuardedStatement (SimpleGuardedStatement *simpleGuardedStatement)
VisitorReturnvisitSimpleIdentifierList (SimpleIdentifierList *simpleIdentifierList)
VisitorReturnvisitSimpleImport (SimpleImport *simpleImport)
VisitorReturnvisitSimpleLeftSideList (SimpleLeftSideList *simpleLeftSideList)
VisitorReturnvisitSimpleMessage (SimpleMessage *simpleMessage)
VisitorReturnvisitSimpleProcess (SimpleProcess *simpleProcess)
VisitorReturnvisitSimpleStatement (SimpleStatement *simpleStatement)
VisitorReturnvisitSkipStatement (SkipStatement *skipStatement)
VisitorReturnvisitStartStatement (StartStatement *startStatement)
VisitorReturnvisitStatement (Statement *statement)
VisitorReturnvisitStopStatement (StopStatement *stopStatement)
VisitorReturnvisitStringLiteral (StringLiteral *stringLiteral)
VisitorReturnvisitType (Type *type)
VisitorReturnvisitUnaryExpression (UnaryExpression *unaryExpression)

Private Attributes

ofstream cFile
ofstream hFile

Constructor & Destructor Documentation

virtual CCodeGeneratorVisitor::~CCodeGeneratorVisitor  )  [inline, virtual]
 

Definition at line 19 of file ccodegeneratorvisitor.h.

00019                                                  {
00020                         if (this->cFile.is_open())
00021                                 this->cFile.close();
00022 
00023                         if (this->hFile.is_open())
00024                                 this->hFile.close();
00025                 }


Member Function Documentation

VisitorReturn * CCodeGeneratorVisitor::visitAction Action action  )  [virtual]
 

Implements Visitor.

Definition at line 7 of file ccodegeneratorvisitor.cpp.

00007                                                                 {
00008         VisitorReturn *v;
00009         return v;
00010 }

VisitorReturn * CCodeGeneratorVisitor::visitActStatement ActStatement actStatement  )  [virtual]
 

Implements Visitor.

Definition at line 12 of file ccodegeneratorvisitor.cpp.

00012                                                                                   {
00013         VisitorReturn *v;
00014         return v;
00015 }

VisitorReturn * CCodeGeneratorVisitor::visitArrayReference ArrayReference arrayReference  )  [virtual]
 

Implements Visitor.

Definition at line 17 of file ccodegeneratorvisitor.cpp.

00017                                                                                         {
00018         VisitorReturn *v;
00019         return v;
00020 }

VisitorReturn * CCodeGeneratorVisitor::visitArrayType ArrayType arrayType  )  [virtual]
 

Implements Visitor.

Definition at line 22 of file ccodegeneratorvisitor.cpp.

00022                                                                          {
00023         VisitorReturn *v;
00024         return v;
00025 }

VisitorReturn * CCodeGeneratorVisitor::visitAssignStatement AssignStatement assignStatement  )  [virtual]
 

Implements Visitor.

Definition at line 27 of file ccodegeneratorvisitor.cpp.

00027                                                                                            {
00028         VisitorReturn *v;
00029         return v;
00030 }

VisitorReturn * CCodeGeneratorVisitor::visitAst Ast ast  )  [virtual]
 

Implements Visitor.

Definition at line 32 of file ccodegeneratorvisitor.cpp.

00032                                                        {
00033         VisitorReturn *v;
00034         return v;
00035 }

VisitorReturn * CCodeGeneratorVisitor::visitBehavior Behavior behavior  )  [virtual]
 

Implements Visitor.

Definition at line 37 of file ccodegeneratorvisitor.cpp.

00037                                                                       {
00038         VisitorReturn *v;
00039         return v;
00040 }

VisitorReturn * CCodeGeneratorVisitor::visitBehaviorStatement BehaviorStatement behaviorStatement  )  [virtual]
 

Implements Visitor.

Definition at line 42 of file ccodegeneratorvisitor.cpp.

00042                                                                                                  {
00043         VisitorReturn *v;
00044         return v;
00045 }

VisitorReturn * CCodeGeneratorVisitor::visitBinaryExpression BinaryExpression binaryExpression  )  [virtual]
 

Implements Visitor.

Definition at line 47 of file ccodegeneratorvisitor.cpp.

00047                                                                                               {
00048         VisitorReturn *v;
00049         return v;
00050 }

VisitorReturn * CCodeGeneratorVisitor::visitDeclaration Declaration declaration  )  [virtual]
 

Implements Visitor.

Definition at line 52 of file ccodegeneratorvisitor.cpp.

00052                                                                                {
00053         VisitorReturn *v;
00054         return v;
00055 }

VisitorReturn * CCodeGeneratorVisitor::visitDoStatement DoStatement doStatement  )  [virtual]
 

Implements Visitor.

Definition at line 57 of file ccodegeneratorvisitor.cpp.

00057                                                                                {
00058         VisitorReturn *v;
00059         return v;
00060 }

VisitorReturn * CCodeGeneratorVisitor::visitExpression Expression expression  )  [virtual]
 

Implements Visitor.

Definition at line 62 of file ccodegeneratorvisitor.cpp.

00062                                                                             {
00063         VisitorReturn *v;
00064         return v;
00065 }

VisitorReturn * CCodeGeneratorVisitor::visitExpressionList ExpressionList expressionList  )  [virtual]
 

Implements Visitor.

Definition at line 67 of file ccodegeneratorvisitor.cpp.

00067                                                                                         {
00068         VisitorReturn *v;
00069         return v;
00070 }

VisitorReturn * CCodeGeneratorVisitor::visitFieldDeclaration FieldDeclaration fieldDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 72 of file ccodegeneratorvisitor.cpp.

00072                                                                                               {
00073         VisitorReturn *v;
00074         return v;
00075 }

VisitorReturn * CCodeGeneratorVisitor::visitFieldReference FieldReference fieldReference  )  [virtual]
 

Implements Visitor.

Definition at line 77 of file ccodegeneratorvisitor.cpp.

00077                                                                                         {
00078         VisitorReturn *v;
00079         return v;
00080 }

VisitorReturn * CCodeGeneratorVisitor::visitFieldType FieldType fieldType  )  [virtual]
 

Implements Visitor.

Definition at line 82 of file ccodegeneratorvisitor.cpp.

00082                                                                          {
00083         VisitorReturn *v;
00084         return v;
00085 }

VisitorReturn * CCodeGeneratorVisitor::visitGuard Guard guard  )  [virtual]
 

Implements Visitor.

Definition at line 87 of file ccodegeneratorvisitor.cpp.

00087                                                              {
00088         VisitorReturn *v;
00089         return v;
00090 }

VisitorReturn * CCodeGeneratorVisitor::visitGuardedStatement GuardedStatement guardedStatement  )  [virtual]
 

Implements Visitor.

Definition at line 92 of file ccodegeneratorvisitor.cpp.

00092                                                                                               {
00093         VisitorReturn *v;
00094         return v;
00095 }

VisitorReturn * CCodeGeneratorVisitor::visitGuardExpression GuardExpression guardExpression  )  [virtual]
 

Implements Visitor.

Definition at line 97 of file ccodegeneratorvisitor.cpp.

00097                                                                                            {
00098         VisitorReturn *v;
00099         return v;
00100 }

VisitorReturn * CCodeGeneratorVisitor::visitGuardReceive GuardReceive guardReceive  )  [virtual]
 

Implements Visitor.

Definition at line 102 of file ccodegeneratorvisitor.cpp.

00102                                                                                   {
00103         VisitorReturn *v;
00104         return v;
00105 }

VisitorReturn * CCodeGeneratorVisitor::visitGuardTimeout GuardTimeout guardTimeout  )  [virtual]
 

Implements Visitor.

Definition at line 107 of file ccodegeneratorvisitor.cpp.

00107                                                                                   {
00108         VisitorReturn *v;
00109         return v;
00110 }

VisitorReturn * CCodeGeneratorVisitor::visitIdentifier Identifier identifier  )  [virtual]
 

Implements Visitor.

Definition at line 112 of file ccodegeneratorvisitor.cpp.

00112                                                                             {
00113         VisitorReturn *v;
00114         return v;
00115 }

VisitorReturn * CCodeGeneratorVisitor::visitIdentifierList IdentifierList identifierList  )  [virtual]
 

Implements Visitor.

Definition at line 117 of file ccodegeneratorvisitor.cpp.

00117                                                                                         {
00118         VisitorReturn *v;
00119         return v;
00120 }

VisitorReturn * CCodeGeneratorVisitor::visitIfStatement IfStatement ifStatement  )  [virtual]
 

Implements Visitor.

Definition at line 122 of file ccodegeneratorvisitor.cpp.

00122                                                                                {
00123         VisitorReturn *v;
00124         return v;
00125 }

VisitorReturn * CCodeGeneratorVisitor::visitImport Import import  )  [virtual]
 

Implements Visitor.

Definition at line 127 of file ccodegeneratorvisitor.cpp.

00127                                                                 {
00128         VisitorReturn *v;
00129         return v;
00130 }

VisitorReturn * CCodeGeneratorVisitor::visitIntegerLiteral IntegerLiteral integerLiteral  )  [virtual]
 

Implements Visitor.

Definition at line 132 of file ccodegeneratorvisitor.cpp.

00132                                                                                         {
00133         VisitorReturn *v;
00134         return v;
00135 }

VisitorReturn * CCodeGeneratorVisitor::visitLeftSide LeftSide leftSide  )  [virtual]
 

Implements Visitor.

Definition at line 137 of file ccodegeneratorvisitor.cpp.

00137                                                                       {
00138         VisitorReturn *v;
00139         return v;
00140 }

VisitorReturn * CCodeGeneratorVisitor::visitLeftSideList LeftSideList leftSideList  )  [virtual]
 

Implements Visitor.

Definition at line 142 of file ccodegeneratorvisitor.cpp.

00142                                                                                   {
00143         VisitorReturn *v;
00144         return v;
00145 }

VisitorReturn * CCodeGeneratorVisitor::visitMessage Message message  )  [virtual]
 

Implements Visitor.

Definition at line 147 of file ccodegeneratorvisitor.cpp.

00147                                                                    {
00148         VisitorReturn *v;
00149         
00150         return v;
00151 }

VisitorReturn * CCodeGeneratorVisitor::visitMultipleArrayReference MultipleArrayReference multipleArrayReference  )  [virtual]
 

Implements Visitor.

Definition at line 153 of file ccodegeneratorvisitor.cpp.

00153                                                                                                                 {
00154         VisitorReturn *v;
00155         return v;
00156 }

VisitorReturn * CCodeGeneratorVisitor::visitProcess Process process  )  [virtual]
 

Implements Visitor.

Definition at line 158 of file ccodegeneratorvisitor.cpp.

00158                                                                    {
00159         VisitorReturn *v;
00160         return v;
00161 }

VisitorReturn * CCodeGeneratorVisitor::visitProgram Program program  )  [virtual]
 

hFile.is_open() &&

Implements Visitor.

Definition at line 164 of file ccodegeneratorvisitor.cpp.

References cFile, Program::getBehavior(), Program::getImport(), Program::getMessage(), hFile, and Ast::visit().

00164                                                                    {
00165         VisitorReturn *v = 0;
00166 
00167         if(program->getImport())
00168                 program->getImport()->visit(*this); // Não está sendo considerado ainda
00169         if(program->getBehavior())
00170                 program->getBehavior()->visit(*this); // Não está sendo considerado ainda
00171 
00172         // Creating messages files!
00173         this->hFile.open("./code/messages.h");
00174         this->cFile.open("./code/messages.c");
00175 
00176         if (hFile.is_open() && cFile.is_open()) {
00177                 hFile << "\n\n";
00186                 
00187                 hFile << "#ifndef _MESSAGES_H_\n";
00188                 hFile << "#define _MESSAGES_H_\n\n";
00189         
00190                 hFile << "#include <netinet/in.h>\n";
00191                 hFile << "#include <stdint.h>\n\n";
00192 
00193                 hFile << "#ifndef _PM_BYTE_TYPE_\n";
00194                 hFile << "#define _PM_BYTE_TYPE_\n";
00195                 hFile << "\ttypedef unsigned char byte;\n";
00196                 hFile << "#endif\n\n";
00197 
00198                 cFile << "#include <string.h>\n";
00199                 cFile << "#include <stdlib.h>\n";
00200                 cFile << "#include \"messages.h\"\n\n";
00201         }
00202         else {
00203                 cerr << "Unable to create messages.h and messages.c!\n";
00204                 exit(1);
00205         }
00206         program->getMessage()->visit(*this); 
00207         hFile << "#endif\n";
00208 
00209         hFile.close();
00210         cFile.close();
00211         
00212 
00213 // Creating process files!
00214 //      this->hFile.open("./code/processes.h");
00215 //      this->cFile.open("./code/processes.c");
00216         this->cFile.open("./code/server.c");
00217 
00218 
00219         if ( cFile.is_open()) {
00220 /*              hFile << "
00255 // Escrita do servidor do cliente. GAMBIARRA temporária!!
00256                 cFile << "#include \"cpmsocket.h\"\n";
00257                 cFile << "#include \"messages.h\"\n\n";
00258                 cFile << "int main(void)\n{\n";
00259                 cFile << "\tPMSocket *server = pmsocket_open(\"127.0.0.1\", 9986, TCP);\n";
00260                 cFile << "\tbyte buffer[14];\n\n";
00261                 cFile << "\tpmsocket_accept(server, 10);\n";
00262                 cFile << "\tpmsocket_recv(server, buffer, 14, NULL);\n";
00263                 cFile << "\tpmsocket_close(server);\n\n";
00264                 cFile << "\treturn 0;\n}\n";
00265                 cFile.close();
00266 
00267                 cFile.open("./code/client.c");
00268                 if (cFile.is_open()) {
00269                         cFile << "#include \"cpmsocket.h\"\n";
00270                         cFile << "#include \"messages.h\"\n\n";
00271                         cFile << "int main(void)\n{\n";
00272                         cFile << "\tPMSocket *server = pmsocket_connect(\"127.0.0.1\", 9986);\n";
00273                         cFile << "\tmessage_one msg;\n";
00274                         cFile << "\tbyte *buffer;\n\n";
00275                         cFile << "\tmsg.length = 10;\n\tmsg.msg = (byte *) malloc(msg.length);\n";
00276                         cFile << "\tmemcpy(msg.msg, \"projeto-R2\", 10);\n";
00277                         cFile << "\tmsg.flags = 3;\n";
00278                         cFile << "\tbuffer = message_one_serialize(&msg, NULL);\n";
00279                         cFile << "\tpmsocket_send(server, buffer, 14);\n";
00280                         cFile << "\tpmsocket_close(server);\n\n";
00281                         cFile << "\treturn 0;\n}\n";
00282                 }
00283         }
00284         else {
00285                 cerr << "Unable to create processes.h and processes.c!\n";
00286                 exit(1);
00287         }
00288 
00289         program->getProcess()->visit(*this);
00290 
00291         return v;
00292 }

VisitorReturn * CCodeGeneratorVisitor::visitRangeType RangeType rangeType  )  [virtual]
 

Implements Visitor.

Definition at line 294 of file ccodegeneratorvisitor.cpp.

00294                                                                          {
00295         VisitorReturn *v;
00296         return v;
00297 }

VisitorReturn * CCodeGeneratorVisitor::visitReceiveStatement ReceiveStatement receiveStatement  )  [virtual]
 

Implements Visitor.

Definition at line 299 of file ccodegeneratorvisitor.cpp.

00299                                                                                               {
00300         VisitorReturn *v;
00301         return v;
00302 }

VisitorReturn * CCodeGeneratorVisitor::visitSendStatement SendStatement sendStatement  )  [virtual]
 

Implements Visitor.

Definition at line 304 of file ccodegeneratorvisitor.cpp.

00304                                                                                      {
00305         VisitorReturn *v;
00306         return v;
00307 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialAction SequentialAction sequentialAction  )  [virtual]
 

Implements Visitor.

Definition at line 309 of file ccodegeneratorvisitor.cpp.

00309                                                                                               {
00310         VisitorReturn *v;
00311         return v;
00312 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialBehavior SequentialBehavior sequentialBehavior  )  [virtual]
 

Implements Visitor.

Definition at line 314 of file ccodegeneratorvisitor.cpp.

00314                                                                                                     {
00315         VisitorReturn *v;
00316         return v;
00317 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialDeclaration SequentialDeclaration sequentialDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 319 of file ccodegeneratorvisitor.cpp.

00319                                                                                                              {
00320         VisitorReturn *v;
00321 
00322         sequentialDeclaration->getDeclaration()->visit(*this);
00323         sequentialDeclaration->getSimpleDeclaration()->visit(*this);
00324         
00325         return v;
00326 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialExpressionList SequentialExpressionList sequentialExpressionList  )  [virtual]
 

Implements Visitor.

Definition at line 328 of file ccodegeneratorvisitor.cpp.

00328                                                                                                                       {
00329         VisitorReturn *v;
00330         return v;
00331 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialFieldDeclaration SequentialFieldDeclaration sequentialFieldDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 333 of file ccodegeneratorvisitor.cpp.

00333                                                                                                                             {
00334         VisitorReturn *v1, *v2;
00335 
00336         v1 = sequentialFieldDeclaration->getFieldDeclaration()->visit(*this);
00337         v2 = sequentialFieldDeclaration->getSimpleFieldDeclaration()->visit(*this);
00338 
00339         v1->fields.push_back(v2->fields[0]);
00340         
00341         return v1;
00342 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialGuardedStatement SequentialGuardedStatement sequentialGuardedStatement  )  [virtual]
 

Implements Visitor.

Definition at line 344 of file ccodegeneratorvisitor.cpp.

00344                                                                                                                             {
00345         VisitorReturn *v;
00346         return v;
00347 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialIdentifierList SequentialIdentifierList sequentialIdentifierList  )  [virtual]
 

Implements Visitor.

Definition at line 349 of file ccodegeneratorvisitor.cpp.

00349                                                                                                                       {
00350         VisitorReturn *v;
00351         return v;
00352 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialImport SequentialImport sequentialImport  )  [virtual]
 

Implements Visitor.

Definition at line 354 of file ccodegeneratorvisitor.cpp.

00354                                                                                               {
00355         VisitorReturn *v;
00356         return v;
00357 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialLeftSideList SequentialLeftSideList sequentialLeftSideList  )  [virtual]
 

Implements Visitor.

Definition at line 359 of file ccodegeneratorvisitor.cpp.

00359                                                                                                                 {
00360         VisitorReturn *v;
00361         return v;
00362 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialMessage SequentialMessage sequentialMessage  )  [virtual]
 

Implements Visitor.

Definition at line 364 of file ccodegeneratorvisitor.cpp.

00364                                                                                                  {
00365         VisitorReturn *v = 0;
00366 
00367         sequentialMessage->getMessage()->visit(*this);
00368         sequentialMessage->getSimpleMessage()->visit(*this);
00369         
00370         return v;
00371 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialProcess SequentialProcess sequentialProcess  )  [virtual]
 

Implements Visitor.

Definition at line 373 of file ccodegeneratorvisitor.cpp.

00373                                                                                                  {
00374         VisitorReturn *v = 0;
00375 
00376         sequentialProcess->getProcess()->visit(*this);
00377         sequentialProcess->getSimpleProcess()->visit(*this);
00378 
00379         return v;
00380 }

VisitorReturn * CCodeGeneratorVisitor::visitSequentialStatement SequentialStatement sequentialStatement  )  [virtual]
 

Implements Visitor.

Definition at line 382 of file ccodegeneratorvisitor.cpp.

00382                                                                                                        {
00383         VisitorReturn *v;
00384         return v;
00385 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleAction SimpleAction simpleAction  )  [virtual]
 

Implements Visitor.

Definition at line 387 of file ccodegeneratorvisitor.cpp.

00387                                                                                   {
00388         VisitorReturn *v;
00389         return v;
00390 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleArrayReference SimpleArrayReference simpleArrayReference  )  [virtual]
 

Implements Visitor.

Definition at line 392 of file ccodegeneratorvisitor.cpp.

00392                                                                                                           {
00393         VisitorReturn *v;
00394         return v;
00395 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleBehavior SimpleBehavior simpleBehavior  )  [virtual]
 

Implements Visitor.

Definition at line 397 of file ccodegeneratorvisitor.cpp.

00397                                                                                         {
00398         VisitorReturn *v;
00399         return v;
00400 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleDeclaration SimpleDeclaration simpleDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 402 of file ccodegeneratorvisitor.cpp.

00402                                                                                                  {
00403         VisitorReturn *v;
00404 
00405         return v;
00406 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleExpressionList SimpleExpressionList simpleExpressionList  )  [virtual]
 

Implements Visitor.

Definition at line 408 of file ccodegeneratorvisitor.cpp.

00408                                                                                                           {
00409         VisitorReturn *v;
00410         return v;
00411 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleFieldDeclaration SimpleFieldDeclaration simpleFieldDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 413 of file ccodegeneratorvisitor.cpp.

00413                                                                                                                 {
00414         VisitorReturn *v = new VisitorReturn;
00415         v->fields.push_back(simpleFieldDeclaration);
00416 
00417         Expression *expr = simpleFieldDeclaration->getFieldType()->getExpression();
00418 
00419         hFile << "\t";
00420         if (typeid(*expr) == typeid(IntegerLiteral)) {
00421                 if (simpleFieldDeclaration->getFieldType()->getType() == FieldType::BYTE)
00422                         hFile << "byte *";
00423                 
00424                 else if (simpleFieldDeclaration->getFieldType()->getType() == FieldType::BIT) {
00425                         IntegerLiteral *il = dynamic_cast<IntegerLiteral*> (expr);
00426 
00427                         if (il->getValue() <= 8)
00428                                 hFile << "byte ";
00429                         else if (il->getValue() <= 16)
00430                                 hFile << "uint16_t ";
00431                         else if (il->getValue() <= 32)
00432                                 hFile << "uint32_t ";
00433                 }
00434         }
00435         else if (typeid(*expr) == typeid(Identifier))
00436                 hFile << "byte *";
00437         
00438         hFile << simpleFieldDeclaration->getIdentifier()->getName() << ";\n";
00439         
00440         return v;
00441 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleGuardedStatement SimpleGuardedStatement simpleGuardedStatement  )  [virtual]
 

Implements Visitor.

Definition at line 443 of file ccodegeneratorvisitor.cpp.

00443                                                                                                                 {
00444         VisitorReturn *v;
00445         return v;
00446 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleIdentifierList SimpleIdentifierList simpleIdentifierList  )  [virtual]
 

Implements Visitor.

Definition at line 448 of file ccodegeneratorvisitor.cpp.

00448                                                                                                           {
00449         VisitorReturn *v;
00450         return v;
00451 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleImport SimpleImport simpleImport  )  [virtual]
 

Implements Visitor.

Definition at line 453 of file ccodegeneratorvisitor.cpp.

00453                                                                                   {
00454         VisitorReturn *v;
00455         return v;
00456 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleLeftSideList SimpleLeftSideList simpleLeftSideList  )  [virtual]
 

Implements Visitor.

Definition at line 458 of file ccodegeneratorvisitor.cpp.

00458                                                                                                     {
00459         VisitorReturn *v;
00460         return v;
00461 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleMessage SimpleMessage simpleMessage  )  [virtual]
 

Implements Visitor.

Definition at line 463 of file ccodegeneratorvisitor.cpp.

00463                                                                                      {
00464         VisitorReturn *v;
00465         static int code = 1;
00466         string name = simpleMessage->getIdentifier()->getName();
00467 
00468 // Generate correct header for the messages.c file!
00469         hFile << "typedef struct {\n";
00470         v = simpleMessage->getFieldDeclaration()->visit(*this);
00471         hFile << "} message_" << name << ";\n\n";
00472 
00473         hFile << "byte *message_" << name << "_serialize(const message_" << name;
00474         hFile << " *msg_" << name << ", byte *buffer);\n";
00475 
00476         hFile << "message_" << name << " *message_" << name << "_unserialize(";
00477         hFile << "const byte *buffer, message_" << name << " *msg_" << name << ");\n\n";
00478         
00479 
00480 // Generate the implementation for the prototypes declared in message.h!
00481 // Serialize the struct
00482         cFile << "byte *message_" << name << "_serialize(const message_" << name;
00483         cFile << " *msg_" << name << ", byte *buffer) {\n";
00484 
00485         cFile << "\tuint16_t code = htons(" << code << ");\n";
00486         cFile << "\tuint32_t offset = 0;\n";
00487     cFile << "\tuint16_t temp16 = 0;\n";
00488     cFile << "\tuint32_t temp32 = 0;\n";
00489         cFile << "\tbyte *buf;\n\n";
00490         cFile << "\tbuf = (byte *) malloc((";
00491 
00492 // Allocate the correct size for the buffer
00493         for (vector<SimpleFieldDeclaration*>::iterator itr = v->fields.begin();
00494                  itr != v->fields.end();
00495                  itr++) {
00496                 if (itr != v->fields.begin())
00497                         cFile << " + ";
00498                         
00499                 Expression *expr = (*itr)->getFieldType()->getExpression();
00500         
00501                 if (typeid(*expr) == typeid(IntegerLiteral)) {
00502                         IntegerLiteral *il = dynamic_cast<IntegerLiteral*> (expr);
00503                         
00504                         if ((*itr)->getFieldType()->getType() == FieldType::BYTE)
00505                                 cFile << il->getValue();
00506                         
00507                         else if ((*itr)->getFieldType()->getType() == FieldType::BIT) {
00508         
00509                                 if (il->getValue() <= 8)
00510                                         cFile << "1";
00511                                 else if (il->getValue() <= 16)
00512                                         cFile << "2";
00513                                 else if (il->getValue() <= 32)
00514                                         cFile << "4";
00515                         }
00516                 }
00517                 else if (typeid(*expr) == typeid(Identifier))
00518                         cFile << "msg_" << name << "->" << (dynamic_cast<Identifier*> (expr))->getName();
00519         }
00520         cFile << ") * sizeof(byte));\n\n";
00521         cFile << "\tmemcpy(buf, &code, 2);\n";
00522         cFile << "\toffset = 2;\n\n";
00523 
00524         for (vector<SimpleFieldDeclaration*>::iterator itr = v->fields.begin();
00525                  itr != v->fields.end();
00526                  itr++) {
00527                 Expression *expr = (*itr)->getFieldType()->getExpression();
00528 
00529                 if (typeid(*expr) == typeid(IntegerLiteral)) {
00530                         IntegerLiteral *il = dynamic_cast<IntegerLiteral*> (expr);
00531                         
00532                         if ((*itr)->getFieldType()->getType() == FieldType::BYTE) {
00533                         cFile << "\tmemcpy((buf + offset), ";
00534                                 cFile << "msg_" << name << "->" << (*itr)->getIdentifier()->getName();
00535                                 cFile << ", " << il->getValue() << ");\n"; 
00536                                 cFile << "\toffset += " << il->getValue() << ";\n\n";
00537                         }
00538                         
00539                         else if ((*itr)->getFieldType()->getType() == FieldType::BIT) {
00540                                 if (il->getValue() > 8 && il->getValue() <= 16) {
00541                                         cFile << "\ttemp16 = htons(msg_" << name << "->" << (*itr)->getIdentifier()->getName();
00542                     cFile << ");\n";
00543                 }
00544                 
00545                                 else if (il->getValue() > 16 && il->getValue() <= 32) {
00546                                         cFile << "\ttemp32 = htonl(msg_" << name << "->" << (*itr)->getIdentifier()->getName();
00547                     cFile << ");\n";
00548                 }
00549                 
00550                 cFile << "\tmemcpy((buf + offset), ";
00551         
00552                                 if (il->getValue() <= 8) {
00553                     cFile << "&(msg_" << name << "->" << (*itr)->getIdentifier()->getName() << "), ";
00554                                         cFile << "1);\n\toffset += 1;\n\n";
00555                 }
00556                                 else if (il->getValue() <= 16)
00557                                         cFile << "&temp16, 2);\n\toffset += 2;\n\n";
00558                                 else if (il->getValue() <= 32)
00559                                         cFile << "&temp32, 4);\n\toffset += 4;\n\n";
00560                         }
00561                 }
00562                 else if (typeid(*expr) == typeid(Identifier)) {
00563             cFile << "\tmemcpy((buf + offset), ";
00564             cFile << "msg_" << name << "->" << (*itr)->getIdentifier()->getName() << ", ";
00565                         cFile << "msg_" << name << "->" << (dynamic_cast<Identifier*> (expr))->getName() << ");\n";
00566                         cFile << "\toffset += msg_" << name << "->";
00567                         cFile << (dynamic_cast<Identifier*> (expr))->getName() << ";\n\n";
00568                 }
00569         }
00570         cFile << "\tif (buffer != NULL) {\n";
00571         cFile << "\t\tmemmove(buffer, buf, offset);\n";
00572         cFile << "\t\tfree(buf);\n\t\tbuf = NULL;\n\t}\n\n";
00573         cFile << "\treturn buf;\n}\n\n";
00574 
00575 
00576 // Unserialize the buffer
00577         cFile << "message_" << name << " *message_" << name << "_unserialize(";
00578         cFile << "const byte *buffer, message_" << name << " *msg_" << name << ") {\n";
00579         
00580         cFile << "\tmessage_" << name << " *msg = (message_" << name << " *) ";
00581         cFile << "malloc(sizeof(message_" << name << "));\n";
00582         cFile << "\tuint32_t offset = 2;\n\n";
00583         
00584         for (vector<SimpleFieldDeclaration*>::iterator itr = v->fields.begin();
00585                  itr != v->fields.end();
00586                  itr++) {
00587                 Expression *expr = (*itr)->getFieldType()->getExpression();
00588 
00589                 if (typeid(*expr) == typeid(IntegerLiteral)) {
00590                         IntegerLiteral *il = dynamic_cast<IntegerLiteral*> (expr);
00591                         
00592                         if ((*itr)->getFieldType()->getType() == FieldType::BYTE) {
00593                                 cFile << "\tmemcpy(msg_" << name << "->" << (*itr)->getIdentifier()->getName();
00594                                 cFile << ", (buffer + offset), " << il->getValue() << ");\n"; 
00595                                 cFile << "\toffset += " << il->getValue() << ";\n\n";
00596                         }
00597                         
00598                         else if ((*itr)->getFieldType()->getType() == FieldType::BIT) {
00599                                 cFile << "\tmemcpy(&(msg_" << name << "->" << (*itr)->getIdentifier()->getName();
00600                                 cFile << "), (buffer + offset), ";
00601         
00602                                 if (il->getValue() <= 8)
00603                                         cFile << "1);\n\toffset += 1;\n\n";
00604                                 else if (il->getValue() <= 16) {
00605                                         cFile << "2);\n\toffset += 2;\n";
00606                     cFile << "\tmsg_" << name << "->" << (*itr)->getIdentifier()->getName() << " = ";
00607                     cFile << "ntohs(msg_" << name << "->" << (*itr)->getIdentifier()->getName() << ");\n\n";
00608                 }
00609                                 else if (il->getValue() <= 32) {
00610                                         cFile << "4);\n\toffset += 4;\n";
00611                     cFile << "\tmsg_" << name << "->" << (*itr)->getIdentifier()->getName() << " = ";
00612                     cFile << "ntohl(msg_" << name << "->" << (*itr)->getIdentifier()->getName() << ");\n\n";
00613                 }
00614                         }
00615                 }
00616                 else if (typeid(*expr) == typeid(Identifier)) {
00617                         cFile << "\tmemcpy(msg_" << name << "->" << (*itr)->getIdentifier()->getName();
00618                         cFile << ", (buffer + offset), ";
00619                         cFile << "msg_" << name << "->" << (dynamic_cast<Identifier*> (expr))->getName() << ");\n";
00620                         cFile << "\toffset += msg_" << name << "->";
00621                         cFile << (dynamic_cast<Identifier*> (expr))->getName() << ";\n\n";
00622                 }
00623         }
00624         
00625         cFile << "\tif (msg_" << name << " != NULL) {\n";
00626         cFile << "\t\tmemmove(msg_" << name << ", msg, offset);\n";
00627         cFile << "\t\tfree(msg);\n\t\tmsg = NULL;\n\t}\n\n";
00628         cFile << "\treturn msg;\n}\n\n";
00629         
00630 // Increment the code for the next message
00631         code++;
00632         
00633         return v;
00634 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleProcess SimpleProcess simpleProcess  )  [virtual]
 

Implements Visitor.

Definition at line 636 of file ccodegeneratorvisitor.cpp.

00636                                                                                      {
00637         VisitorReturn *v = new VisitorReturn();
00638         string name = simpleProcess->getIdentifier()->getName();
00639 
00640         hFile << "typedef struct {\n";
00641         hFile << "\tthreadData data;\n";
00642         simpleProcess->getDeclaration()->visit(*this);
00643         hFile << "} processData;\n\n";
00644         
00645         hFile << "processData " << name << "_proc;\n";
00646         hFile << "processData " << name << "_recp;\n\n";
00647         
00648         hFile << "void *proc_" << name << "(void *args);\n";
00649         hFile << "void *recp_" << name << "(void *args);\n\n";
00650         
00651         
00652         return v;
00653 }

VisitorReturn * CCodeGeneratorVisitor::visitSimpleStatement SimpleStatement simpleStatement  )  [virtual]
 

Implements Visitor.

Definition at line 655 of file ccodegeneratorvisitor.cpp.

00655                                                                                            {
00656         VisitorReturn *v;
00657         return v;
00658 }

VisitorReturn * CCodeGeneratorVisitor::visitSkipStatement SkipStatement skipStatement  )  [virtual]
 

Implements Visitor.

Definition at line 660 of file ccodegeneratorvisitor.cpp.

00660                                                                                      {
00661         VisitorReturn *v;
00662         return v;
00663 }

VisitorReturn * CCodeGeneratorVisitor::visitStartStatement StartStatement startStatement  )  [virtual]
 

Implements Visitor.

Definition at line 665 of file ccodegeneratorvisitor.cpp.

00665                                                                                         {
00666         VisitorReturn *v;
00667         return v;
00668 }

VisitorReturn * CCodeGeneratorVisitor::visitStatement Statement statement  )  [virtual]
 

Implements Visitor.

Definition at line 670 of file ccodegeneratorvisitor.cpp.

00670                                                                          {
00671         VisitorReturn *v;
00672         return v;
00673 }

VisitorReturn * CCodeGeneratorVisitor::visitStopStatement StopStatement stopStatement  )  [virtual]
 

Implements Visitor.

Definition at line 675 of file ccodegeneratorvisitor.cpp.

00675                                                                                      {
00676         VisitorReturn *v;
00677         return v;
00678 }

VisitorReturn * CCodeGeneratorVisitor::visitStringLiteral StringLiteral stringLiteral  )  [virtual]
 

Implements Visitor.

Definition at line 680 of file ccodegeneratorvisitor.cpp.

00680                                                                                      {
00681         VisitorReturn *v;
00682         return v;
00683 }

VisitorReturn * CCodeGeneratorVisitor::visitType Type type  )  [virtual]
 

Implements Visitor.

Definition at line 685 of file ccodegeneratorvisitor.cpp.

00685                                                           {
00686         VisitorReturn *v;
00687         return v;
00688 }

VisitorReturn * CCodeGeneratorVisitor::visitUnaryExpression UnaryExpression unaryExpression  )  [virtual]
 

Implements Visitor.

Definition at line 690 of file ccodegeneratorvisitor.cpp.

00690                                                                                            {
00691         VisitorReturn *v;
00692         return v;
00693 }


Member Data Documentation

ofstream CCodeGeneratorVisitor::cFile [private]
 

messageC e messageH devem ser mudados!

Definition at line 15 of file ccodegeneratorvisitor.h.

Referenced by visitProgram().

ofstream CCodeGeneratorVisitor::hFile [private]
 

Definition at line 16 of file ccodegeneratorvisitor.h.

Referenced by visitProgram().


The documentation for this class was generated from the following files:
Generated on Mon Dec 1 17:38:58 2003 for Protomake by doxygen1.3