00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __NEDGENERATOR_H
00017 #define __NEDGENERATOR_H
00018
00019 #include <iostream>
00020 #include "nedelements.h"
00021
00022 using std::ostream;
00023
00029 void generateNed(ostream& out, NEDElement *node, bool newsyntax);
00030
00037 class NEDGenerator
00038 {
00039 protected:
00040 bool newsyntax;
00041 int indentsize;
00042 ostream& out;
00043
00044 public:
00049 NEDGenerator(ostream& out);
00050
00054 ~NEDGenerator();
00055
00059 void setIndentSize(int indentsize);
00060
00065 void setNewSyntax(bool value);
00066
00070 void generate(NEDElement *node, const char *indent);
00071
00072 protected:
00075 const char *increaseIndent(const char *indent);
00076 const char *decreaseIndent(const char *indent);
00078
00080 void generateNedItem(NEDElement *node, const char *indent, bool islast, const char *arg=NULL);;
00081
00083 void generateChildren(NEDElement *node, const char *indent, const char *arg=NULL);
00084
00086 void generateChildrenWithType(NEDElement *node, int tagcode, const char *indent, const char *arg=0);
00087
00090 void printExpression(NEDElement *node, const char *attr, const char *indent);
00091 void printVector(NEDElement *node, const char *attr, const char *indent);
00092 void printIfExpression(NEDElement *node, const char *attr, const char *indent);
00094
00097 void appendBannerComment(const char *comment, const char *indent);
00098 void appendRightComment(const char *comment, const char *indent);
00099 void appendInlineRightComment(const char *comment, const char *indent);
00100 void appendTrailingComment(const char *comment, const char *indent);
00102
00105 void doNedfiles(NedFilesNode *node, const char *indent, bool islast, const char *);
00106 void doNedfile(NedFileNode *node, const char *indent, bool islast, const char *);
00107 void doImports(ImportNode *node, const char *indent, bool islast, const char *);
00108 void doImport(ImportedFileNode *node, const char *indent, bool islast, const char *);
00109 void doChannel(ChannelNode *node, const char *indent, bool islast, const char *);
00110 void doChanattr(ChannelAttrNode *node, const char *indent, bool islast, const char *);
00111 void doNetwork(NetworkNode *node, const char *indent, bool islast, const char *);
00112 void doSimple(SimpleModuleNode *node, const char *indent, bool islast, const char *);
00113 void doModule(CompoundModuleNode *node, const char *indent, bool islast, const char *);
00114 void doParams(ParamsNode *node, const char *indent, bool islast, const char *);
00115 void doParam(ParamNode *node, const char *indent, bool islast, const char *);
00116 void doGates(GatesNode *node, const char *indent, bool islast, const char *);
00117 void doGate(GateNode *node, const char *indent, bool islast, const char *);
00118 void doMachines(MachinesNode *node, const char *indent, bool islast, const char *);
00119 void doMachine(MachineNode *node, const char *indent, bool islast, const char *);
00120 void doSubmodules(SubmodulesNode *node, const char *indent, bool islast, const char *);
00121 void doSubmodule(SubmoduleNode *node, const char *indent, bool islast, const char *);
00122 void doSubstparams(SubstparamsNode *node, const char *indent, bool islast, const char *);
00123 void doSubstparam(SubstparamNode *node, const char *indent, bool islast, const char *);
00124 void doGatesizes(GatesizesNode *node, const char *indent, bool islast, const char *);
00125 void doGatesize(GatesizeNode *node, const char *indent, bool islast, const char *);
00126 void doSubstmachines(SubstmachinesNode *node, const char *indent, bool islast, const char *);
00127 void doSubstmachine(SubstmachineNode *node, const char *indent, bool islast, const char *);
00128 void doConnections(ConnectionsNode *node, const char *indent, bool islast, const char *);
00129 void printGate(NEDElement *conn, const char *modname, const char *modindexattr,
00130 const char *gatename, const char *gateindexattr, bool isplusplus,
00131 const char *indent);
00132 void doConnection(ConnectionNode *node, const char *indent, bool islast, const char *);
00133 void doConnattr(ConnAttrNode *node, const char *indent, bool islast, const char *arrow);
00134 void doForloop(ForLoopNode *node, const char *indent, bool islast, const char *);
00135 void doLoopvar(LoopVarNode *node, const char *indent, bool islast, const char *);
00136 void doDisplaystring(DisplayStringNode *node, const char *indent, bool islast, const char *);
00137 void doExpression(ExpressionNode *node, const char *indent, bool islast, const char *);
00138 int getOperatorPriority(const char *op, int args);
00139 bool isOperatorLeftAssoc(const char *op);
00140 void doOperator(OperatorNode *node, const char *indent, bool islast, const char *);
00141 void doFunction(FunctionNode *node, const char *indent, bool islast, const char *);
00142 void doParamref(ParamRefNode *node, const char *indent, bool islast, const char *);
00143 void doIdent(IdentNode *node, const char *indent, bool islast, const char *);
00144 void doConst(ConstNode *node, const char *indent, bool islast, const char *);
00145
00146 void doCplusplus(CplusplusNode *node, const char *indent, bool islast, const char *);
00147 void doStructDecl(StructDeclNode *node, const char *indent, bool islast, const char *);
00148 void doClassDecl(ClassDeclNode *node, const char *indent, bool islast, const char *);
00149 void doMessageDecl(MessageDeclNode *node, const char *indent, bool islast, const char *);
00150 void doEnumDecl(EnumDeclNode *node, const char *indent, bool islast, const char *);
00151 void doEnum(EnumNode *node, const char *indent, bool islast, const char *);
00152 void doEnumFields(EnumFieldsNode *node, const char *indent, bool islast, const char *);
00153 void doEnumField(EnumFieldNode *node, const char *indent, bool islast, const char *);
00154 void doMessage(MessageNode *node, const char *indent, bool islast, const char *);
00155 void doClass(ClassNode *node, const char *indent, bool islast, const char *);
00156 void doStruct(StructNode *node, const char *indent, bool islast, const char *);
00157 void doFields(FieldsNode *node, const char *indent, bool islast, const char *);
00158 void doField(FieldNode *node, const char *indent, bool islast, const char *);
00159 void doProperties(PropertiesNode *node, const char *indent, bool islast, const char *);
00160 void doProperty(PropertyNode *node, const char *indent, bool islast, const char *);
00162 };
00163
00164 #endif
00165
00166