#include <Parser.h>
Fonctions membres publiques | |
| Parser (T *pObj) | |
| ~Parser () | |
| void | AddRule (ROUTINE pFunction, const char *pSyntax,...) |
| Ajoute une règle. | |
| void | DelRule (unsigned int iPos) |
| Supprime une règle. | |
| const char * | GetSyntax (unsigned int iPos) |
| Retourne la syntax de la règle. | |
| unsigned int | GetNbRule () |
| Retourne le nombre de règles. | |
| void | ParseLine (const char *pBuffer) |
| Parse un buffer. | |
| void | Parse (const char *pBuffer) |
| Parse un buffer. | |
Définition à la ligne 51 du fichier Parser.h.
|
||||||||||
|
Initialise avec des paramétres par defaut.
Définition à la ligne 62 du fichier Parser.h. 00063 {
00064 obj = pObj;
00065 *none = '\0';
00066 };
|
|
|||||||||
|
Libère la mémoire proprement Définition à la ligne 70 du fichier Parser.h. 00071 {
00072 unsigned int i;
00073
00074 for(i = 0; i < rules.size(); i ++)
00075 delete rules[i];
00076 rules.clear();
00077 };
|
|
||||||||||||||||||||
|
Ajoute une règle avec une syntax et une routine lier.
Définition à la ligne 84 du fichier Parser.h. 00085 {
00086 char temp[PARSER_BUFFER];
00087 va_list args;
00088
00089 va_start(args, pSyntax);
00090 vsprintf(temp, pSyntax, args);
00091 va_end(args);
00092
00093 rules.push_back(new ParserRule(pFunction, temp));
00094 };
|
|
||||||||||
|
Supprime la règle à la position iPos.
Définition à la ligne 100 du fichier Parser.h. 00101 {
00102 if(iPos < rules.size())
00103 rules.erase(rules.begin() + iPos);
00104 };
|
|
|||||||||
|
Retourne le nombre de règles du parser.
Définition à la ligne 123 du fichier Parser.h. 00124 {
00125 return rules.size();
00126 };
|
|
||||||||||
|
Retourne la syntax de la règle iPos.
Définition à la ligne 111 du fichier Parser.h. 00112 {
00113 if(iPos < rules.size())
00114 return rules[iPos]->syntax.data();
00115
00116 return none;
00117 };
|
|
||||||||||
|
Parse le buffer en un seul block, recherche et éxécute une routine.
Définition à la ligne 162 du fichier Parser.h. Références ParserRuleParameter< T >::Add(), CATCH, IsAlphaNumCar(), PARAMETRE, et TRY. 00163 {
00164 unsigned int i = 0;
00165 const char *pSyntax = NULL;
00166 char end = '\0';
00167 char buffer[PARSER_BUFFER];
00168 char temp[PARSER_BUFFER];
00169 char label[PARSER_LABEL];
00170 char *pBuf = NULL;
00171 char *pTemp = NULL;
00172 char *pLabel = NULL;
00173 ParserRuleParameter<T> *parameter = NULL;
00174 TRY
00175
00176 strncpy(buffer, pBuffer, PARSER_BUFFER);
00177
00178 for(i = 0; i < rules.size(); i++)
00179 {
00180 pBuf = buffer;
00181 pSyntax = rules[i]->syntax.c_str();
00182 parameter = new ParserRuleParameter<T>(obj);
00183
00184 do
00185 {
00186 if(*pSyntax == PARSER_TOK) //si c'est un paramètre
00187 {
00188 pLabel = label;
00189 pTemp = temp;
00190
00191 pSyntax++; //passe le PARSER_TOK
00192 while(IsAlphaNumCar(*pSyntax))
00193 *pLabel++ = *pSyntax++; //copie le nom du paramètre
00194 *pLabel = '\0';
00195
00196 end = *pSyntax; //carractère où s'arrète le paramètre
00197
00198 while((*pBuf != '\0') && (*pBuf != end))
00199 {
00200 *pTemp = *pBuf; //copie la valeur du paramètre
00201 pTemp++;
00202 pBuf++;
00203 }
00204 *pTemp = '\0';
00205 pBuf++; //pour être différent de Tok
00206
00207 parameter->Add(label, temp);
00208 }
00209 else //si c'est un carractère non utile
00210 {
00211 if(*pSyntax == *pBuf)
00212 pBuf++;
00213 else //si la requette ne correspond pas au mask
00214 break;
00215 }
00216
00217 if(*pSyntax != '\0')
00218 pSyntax++;
00219 }
00220 while(*pBuf && *pSyntax);
00221
00222 if((*pSyntax == '\0') && (*pBuf == '\0'))
00223 rules[i]->function((PARAMETRE)parameter);
00224
00225 delete parameter;
00226 }
00227
00228 CATCH
00229 };
|
|
||||||||||
|
Parse un buffer ligne à ligne, recherche et éxécute les routines.
Définition à la ligne 132 du fichier Parser.h. 00133 {
00134 char out[PARSER_BUFFER];
00135 const char *b = pBuffer;
00136 char *o = out;
00137 TRY
00138
00139 while(*b)
00140 {
00141 if((*b != '\n') && (*b != '\r'))
00142 {
00143 *o++ = *b;
00144 }
00145 else if(out != o)
00146 {
00147 *o = '\0';
00148 Parse(out);
00149 o = out;
00150 }
00151
00152 b++;
00153 }
00154
00155 CATCH
00156 };
|
1.3.9.1