00001 #ifndef C_CODE_GENERATOR_VISITOR_H 00002 #define C_CODE_GENERATOR_VISITOR_H 00003 00004 #include "visitor.h" 00005 #include <fstream> 00006 #include <iostream> 00007 #include <map> 00008 #include <string> 00009 #include <sstream> 00010 using namespace std; 00011 00012 class CCodeGeneratorVisitor : public Visitor { 00013 private: 00015 ofstream cFile; 00016 ofstream hFile; 00017 00018 public: 00019 virtual ~CCodeGeneratorVisitor() { 00020 if (this->cFile.is_open()) 00021 this->cFile.close(); 00022 00023 if (this->hFile.is_open()) 00024 this->hFile.close(); 00025 } 00026 00027 VisitorReturn *visitAction(Action *action); 00028 VisitorReturn *visitActStatement(ActStatement *actStatement); 00029 VisitorReturn *visitArrayReference(ArrayReference *arrayReference); 00030 VisitorReturn *visitArrayType(ArrayType *arrayType); 00031 VisitorReturn *visitAssignStatement(AssignStatement *assignStatement); 00032 VisitorReturn *visitAst(Ast *ast); 00033 VisitorReturn *visitBehavior(Behavior *behavior); 00034 VisitorReturn *visitBehaviorStatement(BehaviorStatement *behaviorStatement); 00035 VisitorReturn *visitBinaryExpression(BinaryExpression *binaryExpression); 00036 VisitorReturn *visitDeclaration(Declaration *declaration); 00037 VisitorReturn *visitDoStatement(DoStatement *doStatement); 00038 VisitorReturn *visitExpression(Expression *expression); 00039 VisitorReturn *visitExpressionList(ExpressionList *expressionList); 00040 VisitorReturn *visitFieldDeclaration(FieldDeclaration *fieldDeclaration); 00041 VisitorReturn *visitFieldReference(FieldReference *fieldReference); 00042 VisitorReturn *visitFieldType(FieldType *fieldType); 00043 VisitorReturn *visitGuard(Guard *guard); 00044 VisitorReturn *visitGuardedStatement(GuardedStatement *guardedStatement); 00045 VisitorReturn *visitGuardExpression(GuardExpression *guardExpression); 00046 VisitorReturn *visitGuardReceive(GuardReceive *guardReceive); 00047 VisitorReturn *visitGuardTimeout(GuardTimeout *guardTimeout); 00048 VisitorReturn *visitIdentifier(Identifier *identifier); 00049 VisitorReturn *visitIdentifierList(IdentifierList *identifierList); 00050 VisitorReturn *visitIfStatement(IfStatement *ifStatement); 00051 VisitorReturn *visitImport(Import *import); 00052 VisitorReturn *visitIntegerLiteral(IntegerLiteral *integerLiteral); 00053 VisitorReturn *visitLeftSide(LeftSide *leftSide); 00054 VisitorReturn *visitLeftSideList(LeftSideList *leftSideList); 00055 VisitorReturn *visitMessage(Message *message); 00056 VisitorReturn *visitMultipleArrayReference(MultipleArrayReference *multipleArrayReference); 00057 VisitorReturn *visitProcess(Process *process); 00058 VisitorReturn *visitProgram(Program *program); 00059 VisitorReturn *visitRangeType(RangeType *rangeType); 00060 VisitorReturn *visitReceiveStatement(ReceiveStatement *receiveStatement); 00061 VisitorReturn *visitSendStatement(SendStatement *sendStatement); 00062 VisitorReturn *visitSequentialAction(SequentialAction *sequentialAction); 00063 VisitorReturn *visitSequentialBehavior(SequentialBehavior *sequentialBehavior); 00064 VisitorReturn *visitSequentialDeclaration(SequentialDeclaration *sequentialDeclaration); 00065 VisitorReturn *visitSequentialExpressionList(SequentialExpressionList *sequentialExpressionList); 00066 VisitorReturn *visitSequentialFieldDeclaration(SequentialFieldDeclaration *sequentialFieldDeclaration); 00067 VisitorReturn *visitSequentialGuardedStatement(SequentialGuardedStatement *sequentialGuardedStatement); 00068 VisitorReturn *visitSequentialIdentifierList(SequentialIdentifierList *sequentialIdentifierList); 00069 VisitorReturn *visitSequentialImport(SequentialImport *sequentialImport); 00070 VisitorReturn *visitSequentialLeftSideList(SequentialLeftSideList *sequentialLeftSideList); 00071 VisitorReturn *visitSequentialMessage(SequentialMessage *sequentialMessage); 00072 VisitorReturn *visitSequentialProcess(SequentialProcess *sequentialProcess); 00073 VisitorReturn *visitSequentialStatement(SequentialStatement *sequentialStatement); 00074 VisitorReturn *visitSimpleAction(SimpleAction *simpleAction); 00075 VisitorReturn *visitSimpleArrayReference(SimpleArrayReference *simpleArrayReference); 00076 VisitorReturn *visitSimpleBehavior(SimpleBehavior *simpleBehavior); 00077 VisitorReturn *visitSimpleDeclaration(SimpleDeclaration *simpleDeclaration); 00078 VisitorReturn *visitSimpleExpressionList(SimpleExpressionList *simpleExpressionList); 00079 VisitorReturn *visitSimpleFieldDeclaration(SimpleFieldDeclaration *simpleFieldDeclaration); 00080 VisitorReturn *visitSimpleGuardedStatement(SimpleGuardedStatement *simpleGuardedStatement); 00081 VisitorReturn *visitSimpleIdentifierList(SimpleIdentifierList *simpleIdentifierList); 00082 VisitorReturn *visitSimpleImport(SimpleImport *simpleImport); 00083 VisitorReturn *visitSimpleLeftSideList(SimpleLeftSideList *simpleLeftSideList); 00084 VisitorReturn *visitSimpleMessage(SimpleMessage *simpleMessage); 00085 VisitorReturn *visitSimpleProcess(SimpleProcess *simpleProcess); 00086 VisitorReturn *visitSimpleStatement(SimpleStatement *simpleStatement); 00087 VisitorReturn *visitSkipStatement(SkipStatement *skipStatement); 00088 VisitorReturn *visitStartStatement(StartStatement *startStatement); 00089 VisitorReturn *visitStatement(Statement *statement); 00090 VisitorReturn *visitStopStatement(StopStatement *stopStatement); 00091 VisitorReturn *visitStringLiteral(StringLiteral *stringLiteral); 00092 VisitorReturn *visitType(Type *type); 00093 VisitorReturn *visitUnaryExpression(UnaryExpression *unaryExpression); 00094 }; 00095 00096 #endif