给出一个C程序实现(1)文法 S->aA|b A->bA|c (2)分析句子:*****(任意符号串)(3)使用语法分析之递归下降法分析,给出结果是否是该文法的句子。
时间: 2023-07-23 21:32:12 浏览: 112
LL(1)语法分析 任意输入一个文法符号串,并判断它是否为文法的一个句子
5星 · 资源好评率100%
以下是符合文法的C语言代码:
```c
#include<stdio.h>
void A();
void S();
char ch; // 当前读入的字符
int main() {
printf("请输入一个字符串:\n");
ch = getchar();
S();
if (ch == '\n') {
printf("该字符串符合文法\n");
} else {
printf("该字符串不符合文法\n");
}
return 0;
}
void A() {
if (ch == 'b') {
ch = getchar();
A();
} else if (ch == 'c') {
ch = getchar();
} else {
printf("该字符串不符合文法\n");
exit(0);
}
}
void S() {
if (ch == 'a') {
ch = getchar();
A();
} else if (ch == 'b') {
ch = getchar();
} else {
printf("该字符串不符合文法\n");
exit(0);
}
}
```
递归下降法分析过程如下:
1. 主函数调用S()函数开始分析。
2. 如果当前字符是'a',则调用getchar()读入下一个字符,然后调用A()函数分析后续部分。
3. 如果当前字符是'b',则调用getchar()读入下一个字符,分析结束。
4. 如果当前字符不是'a'或'b',则不符合文法,直接输出结果并退出。
5. A()函数开始分析。
6. 如果当前字符是'b',则调用getchar()读入下一个字符,继续调用A()函数分析后续部分。
7. 如果当前字符是'c',则调用getchar()读入下一个字符,分析结束。
8. 如果当前字符既不是'b'也不是'c',则不符合文法,直接输出结果并退出。
通过以上分析,可以看出该程序可以正确地判断一个字符串是否符合文法。
阅读全文