如何写一个dfa判断a和b俩个字母词法并给出分成的单词的代码用C语言
时间: 2023-06-03 12:05:33 浏览: 108
C语言DFA词法分析器
4星 · 用户满意度95%
下面是用C语言写一个DFA判断'a'和'b'两个字母的词法并给出分成的单词的代码:
```c
#include <stdio.h>
#include <stdbool.h>
int main() {
char input[100];
printf("请输入要分析的字符串:");
scanf("%s", input);
int state = 0; // 初始状态为0
for (int i = 0; input[i] != '\0'; i++) {
switch(state) {
case 0: // 初始状态
if (input[i] == 'a') {
state = 1; // 转移到状态1
printf("单词a\n");
} else if (input[i] == 'b') {
state = 2; // 转移到状态2
printf("单词b\n");
} else {
printf("输入有误!\n");
return 0;
}
break;
case 1: // 状态1,上一个字符是a
if (input[i] == 'a') {
printf("单词aa\n");
} else if (input[i] == 'b') {
state = 0;
printf("单词a、b\n");
} else {
printf("输入有误!\n");
return 0;
}
break;
case 2: // 状态2,上一个字符是b
if (input[i] == 'a') {
state = 0;
printf("单词b、a\n");
} else if (input[i] == 'b') {
printf("单词bb\n");
} else {
printf("输入有误!\n");
return 0;
}
break;
default:
printf("状态错误!\n");
return 0;
}
}
if (state == 1) { // 字符串最后一个字符是a
printf("单词a\n");
} else if (state == 2) { // 字符串最后一个字符是b
printf("单词b\n");
}
return 0;
}
```
代码使用了一个状态转移图来表示状态之间的转移关系。其中,状态0表示初始状态,状态1和状态2分别表示上一个字符是a和b的状态。对于输入的每个字符,根据当前的状态和输入的字符确定下一个状态,并输出相应的单词。最后,根据状态判断字符串最后一个单词是什么。
阅读全文