/* S ==> aaBdd S ==> aCd B ==> a C ==> aa */ #include <stdlib.h> #include <string.h> #include <stdio.h> char *cad=NULL; int eres_a() { if ( cad[0] == 'a' ) { cad++; return 1; } else return 0; } int eres_d() { if ( cad[0] == 'd' ) { cad++; return 1; } else return 0; } int eres2d() { return eres_d() && eres_d(); } int eres2a() { return eres_a() && eres_a(); } int eresB() { return eres_a(); } int eresC() { return eres2a(); } int prod2() { return eres_a() && eresC() && eres_d(); } int prod1() { return eres2a() && eresB() && eres2d(); } int Reconoces() { char *aux=(char*)malloc(80); strcpy(aux, cad); if ( prod1() ) return 1; strcpy(cad, aux); if ( prod2() ) return 1; return 0; } int main(int n, char **a) { cad = (char*)malloc(80); system("clear"); while(1) { printf("==> "); scanf("%s", cad); if ( Reconoces() ) printf("Cadena reconocida ...\n"); else printf("Cadena no reconocida ...\n"); } printf("F I N\n\n\n"); }