SINTACTICO_1.c



/*
	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");
}