DFA_lexer
#include <stdio.h>
#include <string.h>
#define NUM_STATES 7
#define NUM_INPUTS 3
// DFA states
enum { D0, D1, D2, D3, D4, D5, DEAD };
// Input mapping: a -> 0, b -> 1, other -> 2
int get_input(char c) {
if (c == 'a') return 0;
if (c == 'b') return 1;
return 2; // invalid input
}
// Accepting states with token labels
const char* accepting_tokens[NUM_STATES] = {
"a*", // D0 -> accepting
"a*", // D1
"a*b+", // D2
"a*", // D3
"a*b+", // D4
"a*b+,abb",
NULL // DEAD
};
int main() {
// DFA transition table: next_state[current_state][input_symbol]
int next_state[NUM_STATES][NUM_INPUTS] = {
/* D0 */ { D1, D2, DEAD },
/* D1 */ { D3, D4, DEAD },
/* D2 */ { DEAD, D2, DEAD },
/* D3 */ { D3, D2, DEAD },
/* D4 */ { DEAD, D5, DEAD },
/* D5 */ { DEAD, D2, DEAD },
/* DEAD */{ DEAD, DEAD, DEAD }
};
char str[100];
printf("Enter a string: ");
//scanf("%s", str);
gets(str);
int state = D0;
for (int i = 0; str[i] != '\0'; i++) {
int input = get_input(str[i]);
state = next_state[state][input];
if (state == DEAD) break;
}
// Check if the final state is accepting
if (accepting_tokens[state] != NULL) {
printf("%s Accepted by DFA: %s\n", str, accepting_tokens[state]);
} else {
printf("%s Rejected by all patterns\n", str);
}
return 0;
}
Public Last updated: 2026-01-24 07:00:57 AM