/*************************************************************************************************************************************/ /* */ /* T E S T D E S F O N C T I O N S D E G E S T I O N D E S */ /* " E X P R E S S I O N S " R E G U L I E R E S ( A L A ' sed ' ) */ /* A V E C U T I L I S A T I O N D ' I N D E X */ /* E T T E S T D E S S O U S - E X P R E S S I O N S */ /* E T T E S T D U M A R Q U E U R ' ^$ ' : */ /* */ /* */ /* Author of '$xtc/regul_exp.05$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */ /* */ /*************************************************************************************************************************************/ extern void *malloc(); #include <stdio.h> #define INIT \ char *sp = expression_reguliere; #define GETC() \ (*sp++) #define PEEKC() \ (*sp) #define UNGETC(c) \ (--sp) #define RETURN(c) \ return(c); #define ERROR(c) \ exit(); static char *expression_reguliere="^"; #include <regexp.h> #define LONGUEUR \ 10000 main() { char *pointeur; char *chaineA="123\n\n456\n\n789\n"; char *sous_chaineA; int indexA; char *chaineR; int indexR; char *loc1_precedent=0,*loc2_precedent=0; char *chaineS="+-"; char *expression_compilee=malloc(LONGUEUR); char *fin_expression_compilee; int iterer=0; chaineR=malloc(2*strlen(chaineA)); fin_expression_compilee=compile(expression_reguliere,expression_compilee,&expression_compilee[(LONGUEUR-1)+1],'\0'); printf("\n expression reguliere......=%s",expression_reguliere); printf("\n nombre de sous-expressions=%d",nbra); printf("\n longueur..................=(%d,%d)=%d" ,expression_compilee,fin_expression_compilee,fin_expression_compilee-expression_compilee ); printf("\n expression compilee.......=("); for (pointeur=expression_compilee ; pointeur <= fin_expression_compilee ; pointeur++) { printf(" %02x",*pointeur); } printf(" )\n"); if ((fin_expression_compilee-expression_compilee) > LONGUEUR) { printf("\n expression trop compliquee"); } else { } sous_chaineA=chaineA; indexA=0; indexR=0; while (iterer == 0) { if (step(sous_chaineA,expression_compilee) != 0) { if ((loc1 != loc1_precedent) && (loc2 != loc2_precedent)) { int indexS=0; int NSousExp=0; printf("\n loc1(%d)='%02x' loc2(%d)='%02x'",loc1,*loc1,loc2,*loc2); printf("\n nbra......................=%d",nbra); printf("\n sous_chaineA..............=("); for (pointeur=sous_chaineA ; pointeur < loc2 ; pointeur++) { printf(" %02x",*pointeur); } printf(" )\n"); for (NSousExp=1 ; NSousExp<=nbra ; NSousExp++) { char *SousExp; printf("\n sous-expression(%d)=",NSousExp); for (SousExp=_braslist[NSousExp-1] ; SousExp<_braelist[NSousExp-1] ; SousExp++) { printf("%c",*SousExp); } } for (indexA=indexA ; indexA<(loc1-chaineA) ; indexA++) { *(chaineR+indexR) = *(chaineA+indexA); indexR++; } for (indexS=indexS ; indexS<strlen(chaineS) ; indexS++) { *(chaineR+indexR) = *(chaineS+indexS); indexR++; } printf("\n trouvee='%02x' en (%d,%d)",*loc1,loc1-chaineA,loc2-chaineA); sous_chaineA=loc2; indexA=sous_chaineA-chaineA; loc1_precedent=loc1; loc2_precedent=loc2; } else { printf("\n bouclage"); iterer++; } } else { printf("\n fin (ou absente)"); iterer++; } } for (indexA=indexA ; indexA<strlen(chaineA) ; indexA++) { *(chaineR+indexR) = *(chaineA+indexA); indexR++; } *(chaineR+indexR) = 0; printf("\n chaineA=%s",chaineA); printf("\n chaineR=%s",chaineR); printf("\n"); }