rendered paste body#include <stdio.h>
#define MAXSTR 50 // Tamanho maximo da string de entrada
// Prototipos
int* q0(char);
int q1(char);
int q2(char);
int q3(char);
// Funcoes com comportamento de cada estado do automato
int* q0(char ch) {
printf( "__>q0__(%c)", ch);
return (ch == 'a') ? q1 : q2;
}
int q1(char ch) {
printf( "__>q1__(%c)", ch);
return (ch == 'a') ? q0 : q3;
}
int q2(char ch) {
printf( "__>q2__(%c)", ch);
return (ch == 'a') ? q3 : q0;
}
int q3(char ch) {
printf( "__>q3__(%c)", ch);
return (ch == 'a') ? q2 : q1;
}
int main() {
int i;
char str[MAXSTR] = {'a', 'b', 'a', 'a', '\0'};
int (*estado)(); // Ponteiro p/ funcao do estado atual do aut
estado = q0; // Estado inicial
/*
printf("Entre com a string: ");
if (fgets(str, MAXSTR, stdin ) == NULL )
return 0; // Overflow -> Terminando.*/
for (i=0; (str[i] != '\0' && i < MAXSTR); i++)
estado = (*estado)(str[i]);
// Verifica estado final
if (estado == q3)
printf("->q3\nAceita.\n");
else {
(*estado)(' '); // foo call, so p/ mostrar estado final.
printf("\nRejeita.\n");
}
return 0;
}