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

javacodegeneratorvisitor.cpp

Go to the documentation of this file.
00001 #include "javacodegeneratorvisitor.h"
00002 #include "protomake.h"
00003 
00004 JavaCodeGeneratorVisitor::JavaCodeGeneratorVisitor(const char *filename) : msgCode(0), output(filename) {
00005 }
00006 
00007 VisitorReturn *JavaCodeGeneratorVisitor::visitAction(Action *action) {
00008         VisitorReturn *v;
00009         return v;
00010 }
00011 
00012 VisitorReturn *JavaCodeGeneratorVisitor::visitActStatement(ActStatement *actStatement) {
00013         VisitorReturn *v;
00014         return v;
00015 }
00016 
00017 VisitorReturn *JavaCodeGeneratorVisitor::visitArrayReference(ArrayReference *arrayReference) {
00018         VisitorReturn *v;
00019         return v;
00020 }
00021 
00022 VisitorReturn *JavaCodeGeneratorVisitor::visitArrayType(ArrayType *arrayType) {
00023         VisitorReturn *v;
00024         return v;
00025 }
00026 
00027 VisitorReturn *JavaCodeGeneratorVisitor::visitAssignStatement(AssignStatement *assignStatement) {
00028         VisitorReturn *v;
00029         return v;
00030 }
00031 
00032 VisitorReturn *JavaCodeGeneratorVisitor::visitAst(Ast *ast) {
00033         VisitorReturn *v;
00034         return v;
00035 }
00036 
00037 VisitorReturn *JavaCodeGeneratorVisitor::visitBehavior(Behavior *behavior) {
00038         VisitorReturn *v;
00039         return v;
00040 }
00041 
00042 VisitorReturn *JavaCodeGeneratorVisitor::visitBehaviorStatement(BehaviorStatement *behaviorStatement) {
00043         VisitorReturn *v;
00044         return v;
00045 }
00046 
00047 VisitorReturn *JavaCodeGeneratorVisitor::visitBinaryExpression(BinaryExpression *binaryExpression) {
00048         VisitorReturn *v;
00049         return v;
00050 }
00051 
00052 VisitorReturn *JavaCodeGeneratorVisitor::visitDeclaration(Declaration *declaration) {
00053         VisitorReturn *v;
00054         return v;
00055 }
00056 
00057 VisitorReturn *JavaCodeGeneratorVisitor::visitDoStatement(DoStatement *doStatement) {
00058         VisitorReturn *v;
00059         return v;
00060 }
00061 
00062 VisitorReturn *JavaCodeGeneratorVisitor::visitExpression(Expression *expression) {
00063         VisitorReturn *v;
00064         return v;
00065 }
00066 
00067 VisitorReturn *JavaCodeGeneratorVisitor::visitExpressionList(ExpressionList *expressionList) {
00068         VisitorReturn *v;
00069         return v;
00070 }
00071 
00072 VisitorReturn *JavaCodeGeneratorVisitor::visitFieldDeclaration(FieldDeclaration *fieldDeclaration) {
00073         VisitorReturn *v;
00074         return v;
00075 }
00076 
00077 VisitorReturn *JavaCodeGeneratorVisitor::visitFieldReference(FieldReference *fieldReference) {
00078         VisitorReturn *v;
00079         return v;
00080 }
00081 
00082 VisitorReturn *JavaCodeGeneratorVisitor::visitFieldType(FieldType *fieldType) {
00083         VisitorReturn *v;
00084         return v;
00085 }
00086 
00087 VisitorReturn *JavaCodeGeneratorVisitor::visitGuard(Guard *guard) {
00088         VisitorReturn *v;
00089         return v;
00090 }
00091 
00092 VisitorReturn *JavaCodeGeneratorVisitor::visitGuardedStatement(GuardedStatement *guardedStatement) {
00093         VisitorReturn *v;
00094         return v;
00095 }
00096 
00097 VisitorReturn *JavaCodeGeneratorVisitor::visitGuardExpression(GuardExpression *guardExpression) {
00098         VisitorReturn *v;
00099         return v;
00100 }
00101 
00102 VisitorReturn *JavaCodeGeneratorVisitor::visitGuardReceive(GuardReceive *guardReceive) {
00103         VisitorReturn *v;
00104         return v;
00105 }
00106 
00107 VisitorReturn *JavaCodeGeneratorVisitor::visitGuardTimeout(GuardTimeout *guardTimeout) {
00108         VisitorReturn *v;
00109         return v;
00110 }
00111 
00112 VisitorReturn *JavaCodeGeneratorVisitor::visitIdentifier(Identifier *identifier) {
00113         VisitorReturn *v;
00114         return v;
00115 }
00116 
00117 VisitorReturn *JavaCodeGeneratorVisitor::visitIdentifierList(IdentifierList *identifierList) {
00118         VisitorReturn *v;
00119         return v;
00120 }
00121 
00122 VisitorReturn *JavaCodeGeneratorVisitor::visitIfStatement(IfStatement *ifStatement) {
00123         VisitorReturn *v;
00124         return v;
00125 }
00126 
00127 VisitorReturn *JavaCodeGeneratorVisitor::visitImport(Import *import) {
00128         VisitorReturn *v;
00129         return v;
00130 }
00131 
00132 VisitorReturn *JavaCodeGeneratorVisitor::visitIntegerLiteral(IntegerLiteral *integerLiteral) {
00133         VisitorReturn *v;
00134         return v;
00135 }
00136 
00137 VisitorReturn *JavaCodeGeneratorVisitor::visitLeftSide(LeftSide *leftSide) {
00138         VisitorReturn *v;
00139         return v;
00140 }
00141 
00142 VisitorReturn *JavaCodeGeneratorVisitor::visitLeftSideList(LeftSideList *leftSideList) {
00143         VisitorReturn *v;
00144         return v;
00145 }
00146 
00147 VisitorReturn *JavaCodeGeneratorVisitor::visitMessage(Message *message) {
00148         VisitorReturn *v;
00149         return v;
00150 }
00151 
00152 VisitorReturn *JavaCodeGeneratorVisitor::visitMultipleArrayReference(MultipleArrayReference *multipleArrayReference) {
00153         VisitorReturn *v;
00154         return v;
00155 }
00156 
00157 VisitorReturn *JavaCodeGeneratorVisitor::visitProcess(Process *process) {
00158         VisitorReturn *v;
00159         return v;
00160 }
00161 
00162 VisitorReturn *JavaCodeGeneratorVisitor::visitProgram(Program *program) {
00163         VisitorReturn *v;
00164         output << "import java.io.*;\nimport java.net.*;\n\n\n";
00165         program->getMessage()->visit(*this);
00166         output.close();
00167         return v;
00168 }
00169 
00170 VisitorReturn *JavaCodeGeneratorVisitor::visitRangeType(RangeType *rangeType) {
00171         VisitorReturn *v;
00172         return v;
00173 }
00174 
00175 VisitorReturn *JavaCodeGeneratorVisitor::visitReceiveStatement(ReceiveStatement *receiveStatement) {
00176         VisitorReturn *v;
00177         return v;
00178 }
00179 
00180 VisitorReturn *JavaCodeGeneratorVisitor::visitSendStatement(SendStatement *sendStatement) {
00181         VisitorReturn *v;
00182         return v;
00183 }
00184 
00185 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialAction(SequentialAction *sequentialAction) {
00186         VisitorReturn *v;
00187         return v;
00188 }
00189 
00190 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialBehavior(SequentialBehavior *sequentialBehavior) {
00191         VisitorReturn *v;
00192         return v;
00193 }
00194 
00195 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialDeclaration(SequentialDeclaration *sequentialDeclaration) {
00196         VisitorReturn *v;
00197         return v;
00198 }
00199 
00200 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialExpressionList(SequentialExpressionList *sequentialExpressionList) {
00201         VisitorReturn *v;
00202         return v;
00203 }
00204 
00205 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialFieldDeclaration(SequentialFieldDeclaration *sequentialFieldDeclaration) {
00206         VisitorReturn *v;
00207         sequentialFieldDeclaration->getFieldDeclaration()->visit(*this);
00208         sequentialFieldDeclaration->getSimpleFieldDeclaration()->visit(*this);
00209         return v;
00210 }
00211 
00212 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialGuardedStatement(SequentialGuardedStatement *sequentialGuardedStatement) {
00213         VisitorReturn *v;
00214         return v;
00215 }
00216 
00217 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialIdentifierList(SequentialIdentifierList *sequentialIdentifierList) {
00218         VisitorReturn *v;
00219         return v;
00220 }
00221 
00222 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialImport(SequentialImport *sequentialImport) {
00223         VisitorReturn *v;
00224         return v;
00225 }
00226 
00227 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialLeftSideList(SequentialLeftSideList *sequentialLeftSideList) {
00228         VisitorReturn *v;
00229         return v;
00230 }
00231 
00232 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialMessage(SequentialMessage *sequentialMessage) {
00233         VisitorReturn *v;
00234         sequentialMessage->getMessage()->visit(*this);
00235         sequentialMessage->getSimpleMessage()->visit(*this);
00236         return v;
00237 }
00238 
00239 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialProcess(SequentialProcess *sequentialProcess) {
00240         VisitorReturn *v;
00241         return v;
00242 }
00243 
00244 VisitorReturn *JavaCodeGeneratorVisitor::visitSequentialStatement(SequentialStatement *sequentialStatement) {
00245         VisitorReturn *v;
00246         return v;
00247 }
00248 
00249 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleAction(SimpleAction *simpleAction) {
00250         VisitorReturn *v;
00251         return v;
00252 }
00253 
00254 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleArrayReference(SimpleArrayReference *simpleArrayReference) {
00255         VisitorReturn *v;
00256         return v;
00257 }
00258 
00259 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleBehavior(SimpleBehavior *simpleBehavior) {
00260         VisitorReturn *v;
00261         return v;
00262 }
00263 
00264 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleDeclaration(SimpleDeclaration *simpleDeclaration) {
00265         VisitorReturn *v;
00266         return v;
00267 }
00268 
00269 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleExpressionList(SimpleExpressionList *simpleExpressionList) {
00270         VisitorReturn *v;
00271         return v;
00272 }
00273 
00274 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleFieldDeclaration(SimpleFieldDeclaration *simpleFieldDeclaration) {
00275         VisitorReturn *v;       
00276         string name = simpleFieldDeclaration->getIdentifier()->getName();
00277         string type;
00278         
00279         this->stack.push_back(simpleFieldDeclaration);
00280         
00281         if(simpleFieldDeclaration->getFieldType()->getType() == FieldType::BYTE) {
00282                 type = "byte[]";
00283         } else {
00284                 int value = ((IntegerLiteral*)simpleFieldDeclaration->getFieldType()->getExpression())->getValue();
00285                 if(value <= 8) {
00286                         type = "byte";
00287                 } else if(value <= 16) {
00288                         type = "short";
00289                 } else {
00290                         type = "int";
00291                 }
00292         }
00293         output << "\tprivate " << type << " " << name << ";\n\n"; 
00294         
00299         if(type == "byte[]") {
00300                 output << "\tpublic void set" << name << "(String " << name << ") {\n";
00301                 output << "\t}\n\n";
00302         }
00303         
00307         output << "\tpublic void set" << name << "(" << type << " " << name << ") {\n";
00308         output << "\t\tthis." << name << " = " << name << ";\n\t}\n\n";
00309         
00313         output << "\tpublic " << type << " get" << name << "() {\n\t\treturn this." << name << ";\n\t}\n\n";
00314 
00315         return v;
00316 }
00317 
00318 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleGuardedStatement(SimpleGuardedStatement *simpleGuardedStatement) {
00319         VisitorReturn *v;
00320         return v;
00321 }
00322 
00323 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleIdentifierList(SimpleIdentifierList *simpleIdentifierList) {
00324         VisitorReturn *v;
00325         return v;
00326 }
00327 
00328 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleImport(SimpleImport *simpleImport) {
00329         VisitorReturn *v;
00330         return v;
00331 }
00332 
00333 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleLeftSideList(SimpleLeftSideList *simpleLeftSideList) {
00334         VisitorReturn *v;
00335         return v;
00336 }
00337 
00338 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleMessage(SimpleMessage *simpleMessage) {
00339         VisitorReturn *v;
00340         this->msgCode++;
00341         
00342         output << "\n class Message" << simpleMessage->getIdentifier()->getName() <<
00343                                  " {\n";
00344         output << "\tpublic static final short CODE = " << this->msgCode << ";\n";
00345         this->stack.clear();
00346         simpleMessage->getFieldDeclaration()->visit(*this);
00347 
00348         string linha1 = "\t\t\tdataOS.writeShort(CODE);\n";
00349         string linha2 = "\t\t\tdataIS.readShort();\n";
00350         int size = 2;
00351         string campoByte;
00352         for(vector<Ast*>::iterator i = this->stack.begin(); i != this->stack.end(); i++) {
00353                 SimpleFieldDeclaration& fdecl = dynamic_cast<SimpleFieldDeclaration&>(**i);
00354                 string name = fdecl.getIdentifier()->getName();
00355                 linha1 += "\t\t\tdataOS.write";
00356 
00357                 if(fdecl.getFieldType()->getType() == FieldType::BYTE) {
00358                         linha1 += "(this." + name + ", 0, this." + name + ".length);\n";
00359                         linha2 += "\t\t\tdataIS.readFully(this." + name + ");\n";
00360                         campoByte += " + this." + name + ".length";
00361                 } else {
00362                         int value = ((IntegerLiteral*)fdecl.getFieldType()->getExpression())->getValue();
00363                         linha2 += "\t\t\tthis." + name + " = dataIS.read";
00364                         if(value <= 8) {
00365                                 linha1 += "Byte(this." + name + ");\n";
00366                                 linha2 += "Byte();\n";
00367                                 size += 1;
00368                         } else if(value <= 16) {
00369                                 linha1 += "Short(this." + name + ");\n";
00370                                 linha2 += "Short();\n";
00371                                 size += 2;
00372                         } else {
00373                                 linha1 += "Int(this." + name + ");\n";
00374                                 linha2 += "Int();\n";
00375                                 size += 4;
00376                         }
00377                 }
00378 
00379         }
00380 
00384         output << "\tpublic byte[] serialize() {\n";
00385         output << "\t\tByteArrayOutputStream byteOS = null;\n";
00386         output << "\t\tDataOutputStream dataOS = null;\n\t\thandleOut();\n\t\ttry{\n";
00387         output << "\t\t\tbyteOS = new ByteArrayOutputStream();\n\t\t\tdataOS = new DataOutputStream(byteOS);\n\n";
00388         output << linha1;
00389         output << "\t\t\t\n";
00390         output << "\t\t} catch(Exception e) {e.printStackTrace();}\n";
00391         output << "\t\treturn byteOS.toByteArray();\n";
00392         output << "\t}\n\n";
00393 
00397         output << "\tpublic void unserialize(byte[] array) {\n";
00398         output << "\t\tByteArrayInputStream byteIS = null;\n";
00399         output << "\t\tDataInputStream dataIS = null;\n\t\ttry{\n";
00400         output << "\t\t\tbyteIS = new ByteArrayInputStream(array);\n\t\t\tdataIS = new DataInputStream(byteIS);\n\n";
00401         output << linha2;
00402         output << "\t\t\t\n";
00403         output << "\t\t} catch(Exception e) {e.printStackTrace();}\n";
00404         output << "\t\thandleIn();\n";
00405         output << "\t}\n\n";
00406 
00407 
00411         string call;
00412         if(simpleMessage->getHandlerOut()) {
00413                 call = simpleMessage->getHandlerOut()->getName() + "();\n\t}\n\n";
00414         } else {
00415                 call = "\n\t}\n\n";
00416         }
00417         output << "\tprivate void handleOut() {\n\t\t" << call;
00418 
00422         if(simpleMessage->getHandlerIn()) {
00423                 call = simpleMessage->getHandlerIn()->getName() + "();\n\t}\n\n";
00424         } else {
00425                 call = "\n\t}\n\n";
00426         }
00427         output << "\tprivate void handleIn() {\n\t\t" << call;
00428 
00429         output << "\tpublic int getSize() {\n\t\treturn " << size << campoByte << ";\n\t}\n";
00430 
00431         
00432         output << "}\n";
00433         
00434         if(this->msgCode == 1) {
00435         string one = simpleMessage->getIdentifier()->getName();
00436         output << "\nclass Process {\n" <<
00437         "\tpublic void processClient() {\n" <<
00438                 "\t\ttry {\n" <<
00439                 "\t\t\tMessage" << one << " m = new Message" << one << "();\n" <<
00440                 "\t\t\tSocket s = new Socket(\"127.0.0.1\", 100);\n" <<
00441                 "\t\t\tbyte[] msg = m.serialize();\n\n" <<
00442                 "\t\t\ts.getOutputStream().write(msg, 0, msg.length);\n" <<
00443                 "\t\t\ts.close();\n" <<
00444                 "\t\t} catch(Exception e){e.printStackTrace();}\n" <<
00445         "\t}\n\n" <<
00446         "\tpublic void processServer() {\n" <<
00447                "\t\ttry {\n" <<
00448                "\t\tMessage" << one << " m = new Message" << one << "();\n" <<
00449                "\t\tServerSocket s = new ServerSocket(100);\n" <<
00450                "\t\tSocket c = s.accept();\n" <<
00451                "\t\tbyte[] code = new byte[256];\n" <<
00452                "\t\tc.getInputStream().read(code, 0, 2);\n" <<
00453                "\t\tif(code[1] == m.CODE){\n" <<
00454                "\t\tc.getInputStream().read(code, 2, m.getSize() - 2);\n" <<
00455                "\t}\n" <<
00456                "\tm.unserialize(code);" <<
00457                "\t} catch(Exception e){e.printStackTrace();}" <<
00458         "}\n\n}\n";
00459         }       
00460 
00461         return v;
00462 }
00463 
00464 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleProcess(SimpleProcess *simpleProcess) {
00465         VisitorReturn *v;
00466         return v;
00467 }
00468 
00469 VisitorReturn *JavaCodeGeneratorVisitor::visitSimpleStatement(SimpleStatement *simpleStatement) {
00470         VisitorReturn *v;
00471         return v;
00472 }
00473 
00474 VisitorReturn *JavaCodeGeneratorVisitor::visitSkipStatement(SkipStatement *skipStatement) {
00475         VisitorReturn *v;
00476         return v;
00477 }
00478 
00479 VisitorReturn *JavaCodeGeneratorVisitor::visitStartStatement(StartStatement *startStatement) {
00480         VisitorReturn *v;
00481         return v;
00482 }
00483 
00484 VisitorReturn *JavaCodeGeneratorVisitor::visitStatement(Statement *statement) {
00485         VisitorReturn *v;
00486         return v;
00487 }
00488 
00489 VisitorReturn *JavaCodeGeneratorVisitor::visitStopStatement(StopStatement *stopStatement) {
00490         VisitorReturn *v;
00491         return v;
00492 }
00493 
00494 VisitorReturn *JavaCodeGeneratorVisitor::visitStringLiteral(StringLiteral *stringLiteral) {
00495         VisitorReturn *v;
00496         return v;
00497 }
00498 
00499 VisitorReturn *JavaCodeGeneratorVisitor::visitType(Type *type) {
00500         VisitorReturn *v;
00501         return v;
00502 }
00503 
00504 VisitorReturn *JavaCodeGeneratorVisitor::visitUnaryExpression(UnaryExpression *unaryExpression) {
00505         VisitorReturn *v;
00506         return v;
00507 }
00508 

Generated on Mon Dec 1 17:36:37 2003 for Protomake by doxygen1.3