LL(1)文法分析器C语言代码
时间: 2023-10-11 20:13:42 浏览: 249
LL(1)文法分析表用C语言实现
5星 · 资源好评率100%
LL(1)文法是一种自上而下的语法分析方法,可以用于解析一些简单的语法结构。下面是一个简单的LL(1)文法分析器的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char input[100]; // 存储输入的字符串
int index = 0; // 当前字符的位置
// 非终结符E的产生式
void E() {
printf("E -> TE'\n");
T();
E1();
}
// 非终结符E'的产生式
void E1() {
if (input[index] == '+') {
printf("E' -> +TE'\n");
index++;
T();
E1();
}
else {
printf("E' -> ε\n");
}
}
// 非终结符T的产生式
void T() {
printf("T -> FT'\n");
F();
T1();
}
// 非终结符T'的产生式
void T1() {
if (input[index] == '*') {
printf("T' -> *FT'\n");
index++;
F();
T1();
}
else {
printf("T' -> ε\n");
}
}
// 非终结符F的产生式
void F() {
if (input[index] == '(') {
printf("F -> (E)\n");
index++;
E();
if (input[index] == ')') {
index++;
}
else {
printf("Error: 缺少')'\n");
exit(1);
}
}
else if (input[index] >= '0' && input[index] <= '9') {
printf("F -> %c\n", input[index]);
index++;
}
else {
printf("Error: 非法字符\n");
exit(1);
}
}
int main() {
printf("请输入要分析的表达式:");
scanf("%s", input);
E();
if (input[index] == '\0') {
printf("分析成功!\n");
}
else {
printf("Error: 非法字符\n");
}
return 0;
}
```
这个分析器的输入为一个字符串,可以处理加法和乘法运算,支持括号,并能检测非法字符和缺少括号的错误。在代码中,每个非终结符都对应一个函数,通过递归调用这些函数,可以完成对输入字符串的分析。
阅读全文