#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 };
|