5 Null NFA
5 Null NFA
- 5 19-Oct-23
int main()
{
nfaSize = 2;
nfa[0].transitions[MAX_ALPHABET_SIZE - 1][1] = 1;
nfa[0].isFinal = 1;
for (int i = 0; i < nfaSize; i++)
{
closure[i] = 0;
}
newNfaSize = 0;
addState(closure, nfaSize);
for (int state = 0; state < newNfaSize; state++)
{
int newStateSet[MAX_STATES];
int newStateSetSize = 0;
for (int inputSymbol = 0; inputSymbol < MAX_ALPHABET_SIZE;
inputSymbol++)
{
move(inputSymbol, newNfa[state].transitions[MAX_ALPHABET_SIZE -
1], nfaSize, newStateSet, &newStateSetSize);
epsilonClosure(newStateSet[0]);
int newState = addState(closure, nfaSize);
newNfa[state].transitions[inputSymbol][0] = newState;
if (nfa[newStateSet[0]].isFinal)
{
newNfa[newState].isFinal = 1;
}
for (int i = 0; i < nfaSize; i++)
{
closure[i] = 0;
}
}
}
printf("Equivalent NFA without ε-transitions:\n");
for (int state = 0; state < newNfaSize; state++)
{
printf("State q%d: ", state);
for (int inputSymbol = 0; inputSymbol < MAX_ALPHABET_SIZE;
inputSymbol++)
{
printf("q%d ", newNfa[state].transitions[inputSymbol][0]);
}
if (newNfa[state].isFinal)
{
printf("(Final)");
}
printf("\n");
}
return 0;
}
Output:
Number of States: 3
Transitions:
State 0: On input 'a', go to states 0 and 1 (with ε-transition).
State 1: On input 'b', go to state 2.
State 2: On input 'a', go to state 2 (with ε-transition).
State q0: q0 q1
State q1: q2 (Final)
State q2: