00001 //========================================================================== 00002 // nedsyntaxvalidator.h - 00003 // 00004 // OMNeT++/OMNEST 00005 // Discrete System Simulation in C++ 00006 // 00007 // Contents: 00008 // class NEDSyntaxValidator 00009 // 00010 //========================================================================== 00011 00012 /*--------------------------------------------------------------* 00013 Copyright (C) 2002-2008 Andras Varga 00014 Copyright (C) 2006-2008 OpenSim Ltd. 00015 00016 This file is distributed WITHOUT ANY WARRANTY. See the file 00017 `license' for details on this and other legal matters. 00018 *--------------------------------------------------------------*/ 00019 00020 00021 #ifndef __NEDSYNTAXVALIDATOR_H 00022 #define __NEDSYNTAXVALIDATOR_H 00023 00024 #include "nedvalidator.h" 00025 00026 NAMESPACE_BEGIN 00027 00028 00037 class NEDXML_API NEDSyntaxValidator : public NEDValidatorBase 00038 { 00039 protected: 00040 bool parsedExpressions; 00041 00042 // internal helpers: verify attributes 00043 void checkExpressionAttributes(NEDElement *node, const char *attrs[], bool optional[], int n); 00044 void checkDottedNameAttribute(NEDElement *node, const char *attr, bool wildcardsAllowed); 00045 void checkPropertyNameAttribute(NEDElement *node, const char *attr); 00046 void checkPropertyIndexAttribute(NEDElement *node, const char *attr); 00047 00048 // helper: whether the given node is inside the BODY of a submodule or a connection 00049 bool isWithinSubcomponent(NEDElement *node); 00050 00051 // whether the given node is inside an inner type 00052 bool isWithinInnerType(NEDElement *node); 00053 00054 public: 00060 NEDSyntaxValidator(bool parsedExpr, NEDErrorStore *e) 00061 : NEDValidatorBase(e) {parsedExpressions=parsedExpr;} 00062 00066 virtual ~NEDSyntaxValidator() {} 00067 00068 protected: 00071 virtual void validateElement(FilesElement *node); 00072 virtual void validateElement(NedFileElement *node); 00073 virtual void validateElement(CommentElement *node); 00074 virtual void validateElement(PackageElement *node); 00075 virtual void validateElement(ImportElement *node); 00076 virtual void validateElement(PropertyDeclElement *node); 00077 virtual void validateElement(ExtendsElement *node); 00078 virtual void validateElement(InterfaceNameElement *node); 00079 virtual void validateElement(SimpleModuleElement *node); 00080 virtual void validateElement(ModuleInterfaceElement *node); 00081 virtual void validateElement(CompoundModuleElement *node); 00082 virtual void validateElement(ChannelInterfaceElement *node); 00083 virtual void validateElement(ChannelElement *node); 00084 virtual void validateElement(ParametersElement *node); 00085 virtual void validateElement(ParamElement *node); 00086 virtual void validateElement(PropertyElement *node); 00087 virtual void validateElement(PropertyKeyElement *node); 00088 virtual void validateElement(GatesElement *node); 00089 virtual void validateElement(GateElement *node); 00090 virtual void validateElement(TypesElement *node); 00091 virtual void validateElement(SubmodulesElement *node); 00092 virtual void validateElement(SubmoduleElement *node); 00093 virtual void validateElement(ConnectionsElement *node); 00094 virtual void validateElement(ConnectionElement *node); 00095 virtual void validateElement(ConnectionGroupElement *node); 00096 virtual void validateElement(LoopElement *node); 00097 virtual void validateElement(ConditionElement *node); 00098 virtual void validateElement(ExpressionElement *node); 00099 virtual void validateElement(OperatorElement *node); 00100 virtual void validateElement(FunctionElement *node); 00101 virtual void validateElement(IdentElement *node); 00102 virtual void validateElement(LiteralElement *node); 00103 virtual void validateElement(MsgFileElement *node); 00104 virtual void validateElement(NamespaceElement *node); 00105 virtual void validateElement(CplusplusElement *node); 00106 virtual void validateElement(StructDeclElement *node); 00107 virtual void validateElement(ClassDeclElement *node); 00108 virtual void validateElement(MessageDeclElement *node); 00109 virtual void validateElement(PacketDeclElement *node); 00110 virtual void validateElement(EnumDeclElement *node); 00111 virtual void validateElement(EnumElement *node); 00112 virtual void validateElement(EnumFieldsElement *node); 00113 virtual void validateElement(EnumFieldElement *node); 00114 virtual void validateElement(MessageElement *node); 00115 virtual void validateElement(PacketElement *node); 00116 virtual void validateElement(ClassElement *node); 00117 virtual void validateElement(StructElement *node); 00118 virtual void validateElement(FieldElement *node); 00119 virtual void validateElement(UnknownElement *node); 00121 }; 00122 00123 NAMESPACE_END 00124 00125 00126 #endif 00127