C语言实现一个DFA执行的模拟,以下是用例。用例一,如果输入:1011110 那么输出:S->A->B->A->C->C->C->B;用例二,如果输入:1011 那么输出:S->A->B->A->C;用例三,如果输入:11101 那么输出:Error。
时间: 2023-05-31 13:01:33 浏览: 63
#include <stdio.h>
#define STATE_NUM 4 // 状态数
#define SYMBOL_NUM 2 // 符号数
int dfa[STATE_NUM][SYMBOL_NUM] = { // DFA状态转移矩阵
{1, 2}, // 状态0, 输入0转移到状态1, 输入1转移到状态2
{3, 2}, // 状态1, 输入0转移到状态3, 输入1转移到状态2
{1, 2}, // 状态2, 输入0转移到状态1, 输入1转移到状态2
{3, 3} // 状态3, 输入0转移到状态3, 输入1转移到状态3
};
void simulate_dfa(char *input) {
int current_state = 0; // 当前状态为状态0
printf("S"); // 输出初始状态S
for (int i = 0; input[i] != '\0'; i++) {
int symbol = input[i] - '0'; // 将字符转换为数字
current_state = dfa[current_state][symbol];
printf("->%c", 'A' + current_state); // 输出当前状态
}
if (current_state == 3) { // 如果最终状态为状态3,输出Error
printf("\nError");
}
}
int main() {
char input[100];
printf("请输入输入串:");
scanf("%s", input);
simulate_dfa(input);
return 0;
}