00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #pragma once
00011
00012
00013
00014 #define INITARGS 64
00015
00016 #include "ippdme/ippCommandNameType.h"
00017 #include "ippdme/ippTag.h"
00018 #include "ippdme/ippErrorNameType.h"
00019 #include "ippdme/Command/ippCommand.h"
00020 #include "ippdme/Parser/ippParserCmdErrorId.h"
00021 #include <vector>
00022 #include <string>
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 typedef enum ippArgItemType {
00054 ARGCOMMA = ',',
00055 ARGDOT = '.',
00056 ARGDOUBLE = '#',
00057 ARGETAG = 't',
00058 ARGIJK = 'v',
00059 ARGKEYWORD = 'k',
00060 ARGPARENEMPTY = 'E',
00061 ARGPARENDOUBLE ='D',
00062 ARGSTRING ='s',
00063 };
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 class ippCommand;
00100
00101 EXPIMP_TEMPLATE template class IPPDME_EXT_CLASS std::allocator<ippArgItemType>;
00102 EXPIMP_TEMPLATE template class IPPDME_EXT_CLASS std::vector<ippArgItemType>;
00103 EXPIMP_TEMPLATE template class IPPDME_EXT_CLASS std::allocator<ippOtherKeyType>;
00104 EXPIMP_TEMPLATE template class IPPDME_EXT_CLASS std::vector<ippOtherKeyType>;
00105
00106 class IPPDME_EXT_CLASS ippCommandParser
00107 {
00108 public:
00109
00110 ippCommandParser();
00111
00112
00113 virtual ~ippCommandParser();
00114
00115
00116 std::string getErrorMessageString() const;
00117
00118
00119 bool getIsEvent() const {return _isEvent;}
00120
00121 ippParserCmdErrorId getParserErr()const{return _errorCode;}
00122
00123 void parseTag();
00124 int getTag() const{return _tag;}
00125
00126
00127 ippCommandPtr parseCommand();
00128
00131 void setInput(const char * input);
00132
00133
00134 private:
00135
00136 int _argCount;
00137 std::vector<double> _argDoubles;
00138 unsigned int _argInt;
00139 std::vector<ippOtherKeyType> _argKeywords;
00140 int _argSize;
00141 std::vector<std::string> _argStrings;
00142 std::vector<ippArgItemType> _argTypes;
00143 int _arrayIndex;
00144 ippCommandNameType _commandName;
00145 ippParserCmdErrorId _errorCode;
00146 char _inputArray[IPPSIZE];
00147 bool _isEvent;
00148 int _tag;
00149
00150
00151 void makeArraysBigger();
00152
00153 ippCommandPtr makeCommand();
00154 ippCommandPtr makeAbortE();
00155 ippCommandPtr makeAlignPart();
00156 ippCommandPtr makeAlignTool();
00157 ippCommandPtr makeCenterPart();
00158 ippCommandPtr makeChangeTool();
00159 ippCommandPtr makeClearAllErrors();
00160 ippCommandPtr makeDisableUser();
00161 ippCommandPtr makeEnableUser();
00162 ippCommandPtr makeEndSession();
00163 ippCommandPtr makeEnumAllProp();
00164 ippCommandPtr makeEnumProp();
00165 ippCommandPtr makeEnumTools();
00166 ippCommandPtr makeFindTool();
00167 ippCommandPtr makeGet();
00168 ippCommandPtr makeGetChangeToolAction();
00169 ippCommandPtr makeGetCoordSystem();
00170 ippCommandPtr makeGetCsyTransformation();
00171 ippCommandPtr makeGetDMEVersion();
00172 ippCommandPtr makeGetErrorInfo();
00173 ippCommandPtr makeGetErrStatusE();
00174 ippCommandPtr makeGetMachineClass();
00175 ippCommandPtr makeGetProp();
00176 ippCommandPtr makeGetPropE();
00177 ippCommandPtr makeGetXtdErrStatus();
00178 ippCommandPtr makeGoTo();
00179 ippCommandPtr makeHome();
00180 ippCommandPtr makeIsHomed();
00181 ippCommandPtr makeIsUserEnabled();
00182 ippCommandPtr makeLockAxis();
00183 ippCommandPtr makeOnMoveReportE();
00184 ippCommandPtr makeOnPtMeasReport();
00185 ippCommandPtr makeOnScanReport();
00186 ippCommandPtr makePtMeas();
00187 ippCommandPtr makeReQualify();
00188 ippCommandPtr makeScanInCylEndIsPlane();
00189 ippCommandPtr makeScanInCylEndIsSphere();
00190 ippCommandPtr makeScanInPlaneEndIsCyl();
00191 ippCommandPtr makeScanInPlaneEndIsPlane();
00192 ippCommandPtr makeScanInPlaneEndIsSphere();
00193 ippCommandPtr makeScanOnCircle();
00194 ippCommandPtr makeScanOnCircleHint();
00195 ippCommandPtr makeScanOnLine();
00196 ippCommandPtr makeScanOnLineHint();
00197 ippCommandPtr makeScanUnknownHint();
00198 ippCommandPtr makeScanUnknownDensity();
00199 ippCommandPtr makeSetCoordSystem();
00200 ippCommandPtr makeSetCsyTransformation();
00201 ippCommandPtr makeSetProp();
00202 ippCommandPtr makeSetTool();
00203 ippCommandPtr makeStartSession();
00204 ippCommandPtr makeStopAllDaemons();
00205 ippCommandPtr makeStopDaemon();
00206 ippCommandPtr makeTiltCenterPart();
00207 ippCommandPtr makeTiltPart();
00208
00209 ippCommandPtr makeEnumToolCollection();
00210 ippCommandPtr makeEnumAllToolCollections();
00211 ippCommandPtr makeOpenToolCollection();
00212 ippCommandPtr makeSaveActiveCoordSystem();
00213 ippCommandPtr makeLoadCoordSystem();
00214 ippCommandPtr makeDeleteCoordSystem();
00215 ippCommandPtr makeEnumCoordSystems();
00216 ippCommandPtr makeGetNamedCsyTransformation();
00217 ippCommandPtr makeSaveNamedCsyTransformation();
00218 ippCommandPtr makeScanOnCurveDensity();
00219 ippCommandPtr makeScanOnCurveHint();
00220 ippCommandPtr makeScanOnCurve();
00221 ippCommandPtr makeScanOnHelix();
00222 ippCommandPtr makePtMeasSelfCenter();
00223 ippCommandPtr makePtMeasSelfCenterLocked();
00224
00225
00226 void parseCmdArguments();
00227 void parseCmdName();
00228 void parseData();
00229 void parseKeyword();
00230 void parseNumber(ippArgItemType type);
00231 void parseString();
00232 void unSpaceInputArray();
00233
00234
00235 private:
00236 bool CheckOptionalArgument(
00237 int& n,
00238 bool& hasArgument,
00239 ippOtherKeyType type1,
00240 ippOtherKeyType type2,
00241 ippParserCmdErrorId errorIfDuplicated
00242 );
00243 bool CheckOptionalArgument(
00244 int& n,
00245 bool& hasArgument,
00246 ippOtherKeyType type,
00247 ippParserCmdErrorId errorIfDuplicated
00248 );
00249 bool CheckOptionalArgumentValue(
00250 int& n,
00251 bool& hasArgument,
00252 ippOtherKeyType type,
00253 ippParserCmdErrorId errorIfDuplicated,
00254 ippParserCmdErrorId errorIfNotFollowedByNumberInParens,
00255 double& value
00256 );
00257 bool CheckOptionalArgumentValue(
00258 int& n,
00259 bool& hasArgument,
00260 ippOtherKeyType type1,
00261 ippOtherKeyType type2,
00262 ippParserCmdErrorId errorIfDuplicated,
00263 ippParserCmdErrorId errorIfNotFollowedByNumberInParens,
00264 double& value
00265 );
00266 bool CheckOptionalArgumentValue(
00267 int& n,
00268 bool& hasArgument,
00269 ippOtherKeyType type,
00270 ippParserCmdErrorId errorIfDuplicated,
00271 ippParserCmdErrorId errorIfNotFollowedByNumberInParens,
00272 double& valueI,
00273 double& valueJ,
00274 double& valueK
00275 );
00276 bool CheckOptionalArgumentValue(
00277 int& n,
00278 bool& hasArgument,
00279 ippOtherKeyType type1,
00280 ippParserCmdErrorId errorIfDuplicated,
00281 ippParserCmdErrorId errorIfNotFollowedByBooleanInParens,
00282 bool& value
00283 );
00284
00285 double getValue(int index) const;
00286
00287 private:
00288 ippCommandParser(const ippCommandParser&);
00289 void operator=(const ippCommandParser&);
00290 };