00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __NEDSEMANTICVALIDATOR_H
00021 #define __NEDSEMANTICVALIDATOR_H
00022
00023 #include <string.h>
00024 #include "nedvalidator.h"
00025
00026 class NEDSymbolTable;
00027
00034 class NEDSemanticValidator : public NEDValidatorBase
00035 {
00036 protected:
00037 bool parsedExpressions;
00038 NEDSymbolTable *symboltable;
00039
00040
00041 NEDElement *moduletypedecl;
00042
00043 NEDElement *findChildWithTagAndAttribute(NEDElement *node, int tag, const char *attr, const char *value);
00044 void checkGate(GateNode *gate, bool hasGateIndex, bool isInput, NEDElement *conn, bool isSrcGate);
00045 void validateConnGate(const char *submodName, bool hasSubmodIndex,
00046 const char *gateName, bool hasGateIndex,
00047 NEDElement *parent, NEDElement *conn, bool isSrc);
00048
00049 public:
00051 NEDSemanticValidator(bool parsedExpr, NEDSymbolTable *symbtab);
00052
00054 virtual ~NEDSemanticValidator();
00055
00058 virtual void validateElement(NedFilesNode *node);
00059 virtual void validateElement(NedFileNode *node);
00060 virtual void validateElement(ImportNode *node);
00061 virtual void validateElement(ImportedFileNode *node);
00062 virtual void validateElement(ChannelNode *node);
00063 virtual void validateElement(ChannelAttrNode *node);
00064 virtual void validateElement(NetworkNode *node);
00065 virtual void validateElement(SimpleModuleNode *node);
00066 virtual void validateElement(CompoundModuleNode *node);
00067 virtual void validateElement(ParamsNode *node);
00068 virtual void validateElement(ParamNode *node);
00069 virtual void validateElement(GatesNode *node);
00070 virtual void validateElement(GateNode *node);
00071 virtual void validateElement(MachinesNode *node);
00072 virtual void validateElement(MachineNode *node);
00073 virtual void validateElement(SubmodulesNode *node);
00074 virtual void validateElement(SubmoduleNode *node);
00075 virtual void validateElement(SubstparamsNode *node);
00076 virtual void validateElement(SubstparamNode *node);
00077 virtual void validateElement(GatesizesNode *node);
00078 virtual void validateElement(GatesizeNode *node);
00079 virtual void validateElement(SubstmachinesNode *node);
00080 virtual void validateElement(SubstmachineNode *node);
00081 virtual void validateElement(ConnectionsNode *node);
00082 virtual void validateElement(ConnectionNode *node);
00083 virtual void validateElement(ConnAttrNode *node);
00084 virtual void validateElement(ForLoopNode *node);
00085 virtual void validateElement(LoopVarNode *node);
00086 virtual void validateElement(DisplayStringNode *node);
00087 virtual void validateElement(ExpressionNode *node);
00088 virtual void validateElement(OperatorNode *node);
00089 virtual void validateElement(FunctionNode *node);
00090 virtual void validateElement(ParamRefNode *node);
00091 virtual void validateElement(IdentNode *node);
00092 virtual void validateElement(ConstNode *node);
00093 virtual void validateElement(CplusplusNode *node);
00094 virtual void validateElement(StructDeclNode *node);
00095 virtual void validateElement(ClassDeclNode *node);
00096 virtual void validateElement(MessageDeclNode *node);
00097 virtual void validateElement(EnumDeclNode *node);
00098 virtual void validateElement(EnumNode *node);
00099 virtual void validateElement(EnumFieldsNode *node);
00100 virtual void validateElement(EnumFieldNode *node);
00101 virtual void validateElement(MessageNode *node);
00102 virtual void validateElement(ClassNode *node);
00103 virtual void validateElement(StructNode *node);
00104 virtual void validateElement(FieldsNode *node);
00105 virtual void validateElement(FieldNode *node);
00106 virtual void validateElement(PropertiesNode *node);
00107 virtual void validateElement(PropertyNode *node);
00108 virtual void validateElement(UnknownNode *node);
00110 };
00111
00112 #endif
00113