All pastes #2120957 Raw Edit

Mine

public text v1 · immutable
#2120957 ·published 2012-02-23 03:06 UTC
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;
}