#include #include #define REJECT 0 #define ACCEPT 1 #define STOP 2 #define MAXSIZE 100 typedef struct { int p; /* input state */ int a; /* input symbol */ int q; /* output state */ } rule; typedef struct { int n; /* number of states */ int m; /* number of transition rules */ int f[MAXSIZE]; /* final states */ rule T[MAXSIZE]; /* transition table */ } NFA; NFA readNFA ( ) { NFA M; int p, a, q; printf("Enter the number of states: "); scanf("%d", &(M.n)); printf("The states will be numbered 0 to %d\n", M.n-1); for (p=0; p= M.n)) break; M.f[p] = 1; } printf("Enter the rules one by one\n"); printf("Enter -1 as input state to terminate\n"); M.m = 0; while (1) { scanf("%d", &p); if ((p < 0) || (p >= M.n)) break; scanf("%d%d", &a, &q); M.T[M.m].p = p; M.T[M.m].a = a; M.T[M.m].q = q; ++M.m; } return M; } int helper1 ( NFA M, int A[] ) { int U[MAXSIZE], V[MAXSIZE], p, i, j; U[0] = 1; for (p=1; p= 0) && (A[i] < M.n)) { for (p=0; p= M.n)) return (M.f[p]) ? ACCEPT : REJECT; for (j=0; j