利用C语言实现以下LL(1)文法的分析程序。 对于给定的文法G[E] E->TE’ E’->+TE’ | ε T->FT’ T’->*F T’| ε F->(E) | i
时间: 2024-02-17 15:30:34 浏览: 91
以下是基于LL(1)文法的分析程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char lookahead; // 当前查看的字符
char str[100]; // 待分析的字符串
int index = 0; // 当前分析的字符在字符串中的下标
void E();
void Edash();
void T();
void Tdash();
void F();
void match(char c) {
if (lookahead == c) {
lookahead = str[++index];
} else {
printf("Error\n");
exit(0);
}
}
void E() {
T();
Edash();
}
void Edash() {
if (lookahead == '+') {
match('+');
T();
Edash();
}
}
void T() {
F();
Tdash();
}
void Tdash() {
if (lookahead == '*') {
match('*');
F();
Tdash();
}
}
void F() {
if (lookahead == '(') {
match('(');
E();
match(')');
} else if (isalpha(lookahead)) {
match(lookahead);
} else {
printf("Error\n");
exit(0);
}
}
int main() {
printf("Input the string to be parsed:\n");
scanf("%s", str);
lookahead = str[index];
E();
if (lookahead == '\0') {
printf("Success\n");
} else {
printf("Error\n");
}
return 0;
}
```
解释:
程序中的 `match()` 函数用于比较当前查看的字符是否与输入的字符相同,如果相同,则将下标加1,继续处理下一个字符,否则输出错误信息并退出程序。
`E()` 函数对应非终结符 `E`,它先处理 `T`,然后再处理 `E'`。
`Edash()` 函数对应非终结符 `E'`,它根据当前查看的字符是加号还是空串来决定是否处理下一个 `T` 并继续处理 `E'`。
`T()` 函数对应非终结符 `T`,它先处理 `F`,然后再处理 `T'`。
`Tdash()` 函数对应非终结符 `T'`,它根据当前查看的字符是乘号还是空串来决定是否处理下一个 `F` 并继续处理 `T'`。
`F()` 函数对应非终结符 `F`,它根据当前查看的字符是左括号还是字母来决定应该处理括号内的表达式还是该字符本身。
在 `main()` 函数中,先读入待分析的字符串,并将当前查看的字符初始化为字符串的第一个字符。然后调用 `E()` 函数进行分析,最后判断是否已经处理完所有字符,如果是,则输出成功信息,否则输出错误信息。
阅读全文
相关推荐
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)