现有文法:S->aA|b A->bA|c使用递归下降法分析句子:*****(任意符号串),用C语言写一个程序
时间: 2023-07-23 11:31:46 浏览: 99
C语言递归下降语法分析程序
4星 · 用户满意度95%
好的,以下是使用C语言实现的递归下降分析程序:
```c
#include <stdio.h>
char input[] = "*****"; // 输入串
int index = 0; // 当前读取的字符在输入串中的位置
int S(); // 声明S函数
int A(); // 声明A函数
int main() {
if (S()) {
printf("Input string is valid.\n");
} else {
printf("Input string is invalid.\n");
}
return 0;
}
int S() {
int flag = 0;
if (input[index] == 'a') {
index++;
flag = A();
} else if (input[index] == 'b') {
index++;
flag = 1;
} else {
flag = 0;
}
return flag;
}
int A() {
int flag = 0;
if (input[index] == 'b') {
index++;
flag = A();
} else if (input[index] == 'c') {
index++;
flag = 1;
} else {
flag = 0;
}
return flag;
}
```
程序中使用了一个全局变量`index`来表示当前读取的字符在输入串中的位置。`S`函数用来匹配符号S,根据文法中的两个产生式进行递归调用。每次调用时,首先判断当前读取的字符是否符合该产生式,如果符合,则将`index`指针向后移动一个位置,并且继续递归调用下一个符号。如果不符合,则返回0表示匹配失败。
`A`函数用来匹配符号A,同样根据文法中的两个产生式进行递归调用。每次调用时,也是首先判断当前读取的字符是否符合该产生式,如果符合,则将`index`指针向后移动一个位置,并且继续递归调用下一个符号。如果不符合,则返回0表示匹配失败。
在`main`函数中,首先调用`S`函数,如果返回值为1,则说明输入串符合该文法。否则,说明输入串不符合该文法。
阅读全文