实验三递归下降语法分析程序构造
1.实验目的熟悉语法分析阶段的要求,掌握LL(1)语法分析的原理,利用递归下降方式构造语法分析器。
2.实验设备硬件:PC 机一台软件:Windows 系统,高级语言集成开发环境
3.实验内容
根据要求构造递归下降语法分析器
4.实验要求及步骤
文法G(E):
E→TE’
E’→+TE’ |
T→FT’
T’→*FT’|
F→(E) | i
自设10个输入语句(每个语句多加一个#作为结束标记),展示这10个语句经该语法分析器分析后的结果,如果正确输出“Right”,错误输出“ERROR”并输出判错时指针所指字符。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[10];
int index = 0;
void E();
void EP();
void T();
void TP();
void F();
int main() {
int len;
int n;
printf("请输入要测试的次数:");
scanf("%d", &n);
while (n--) {
printf("请输入要测试的语句:");
scanf("%s", str);
len = strlen(str);
str[len] = '#';
str[len + 1] = '\0';
E();
if (str[index] == '#')
printf("Right!\n");
else {
printf("ERROR!\n");
printf("此时指针所指字符为:%c\n", str[index]);
}
strcpy(str, "");
index = 0;
}
return 0;
}
void E() {
T();
EP();
}
void EP() {
if (str[index] == '+') {
index++;
T();
EP();
}
}
void T() {
F();
TP();
}
void TP() {
if (str[index] == '*') {
index++;
F();
TP();
}
}
void F() {
if (str[index] == 'i') {
index++;
}
else if (str[index] == '(') {
index++;
E();
if (str[index] == ')') {
index++;
}
else {
printf("ERROR!\n");
printf("此时指针所指字符为:%c\n", str[index]);
exit(0);
}
}
else {
printf("ERROR!\n");
printf("此时指针所指字符为:%c\n", str[index]);
exit(0);
}
}