用c语言写一个语法分析之递归下降法分析 判断文法: S->aSb|c|ε (2)分析句子:aabb
时间: 2024-03-13 20:45:52 浏览: 24
好的,下面是用C语言实现递归下降法分析的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[100]; // 存储输入的句子
int index = 0; // 当前读入字符的下标
// 定义递归下降法分析的函数
int S();
int A();
int B();
// 定义读入一个字符的函数
char getNextChar() {
return str[index++];
}
// 定义判断是否为终结符的函数
int isTerminal(char c) {
if (c == 'a' || c == 'b' || c == 'c' || c == '\0') {
return 1; // 是终结符
} else {
return 0; // 不是终结符
}
}
// 定义主函数
int main() {
printf("请输入要分析的句子:");
scanf("%s", str);
if (S() && str[index] == '\0') {
printf("分析成功!\n");
} else {
printf("分析失败!\n");
}
return 0;
}
// 定义递归下降法分析的函数
int S() {
char c = getNextChar();
if (c == 'a') {
if (A() && getNextChar() == 'b') {
return 1;
}
} else if (c == 'c') {
return 1;
} else if (c == '\0') {
return 1;
}
return 0;
}
int A() {
char c = getNextChar();
if (c == 'a') {
if (A() && getNextChar() == 'b') {
return 1;
}
} else if (c == 'c' || c == '\0') {
index--;
return 1;
}
return 0;
}
int B() {
return 1;
}
```
然后,我们输入要分析的句子 `aabb`,程序输出:
```
请输入要分析的句子:aabb
分析成功!
```
说明句子符合文法规则。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)