<aside>
#include <stdio.h>
#include <string.h>
#define MAX_PATTERN 100
#define R 256
int DFA[R][MAX_PATTERN]; // 상태 전이 테이블
void buildDFA(char pattern[]) {
int patLength = strlen(pattern);
int X = 0; // 이전 상태를 저장하는 변수
DFA[(int)pattern[0]][0] = 1; // 첫 번째 문자 처리
for (int j = 1; j < patLength; j++) {
// 현재 상태에서 가능한 모든 문자에 대해 이전 상태의 값을 복사
for (int c = 0; c < R; c++) {
DFA[c][j] = DFA[c][X];
}
// 현재 패턴 문자에 대한 전이 설정
DFA[(int)pattern[j]][j] = j + 1;
// 이전 상태 갱신
X = DFA[(int)pattern[j]][X];
}
}
void printDFA(char pattern[]) {
int patLength = strlen(pattern);
printf("DFA Table:\\n");
for (int j = 0; j < patLength; j++) {
printf("State %d: ", j);
for (int c = 0; c < R; c++) {
if (DFA[c][j] > 0) {
printf("[%c -> %d] ", c, DFA[c][j]);
}
}
printf("\\n");
}
}
int main() {
char pattern[] = "ABABC";
buildDFA(pattern);
printDFA(pattern);
return 0;
}
</aside>