实验任务
完成以下描述算术表达式的LL(1)文法的递归下降分析程序构建
G[E]:
E→TE′
E′→+TE′|ε
T→FT′
T′→*FT′|ε
F→(E)|i
说明:终结符号i为用户定义的简单变量,即标识符的定义。
要求具有如下功能:
- 从文件读入算术表达式/或者从终端输入
- 总控函数分析算术表达式;
- 根据分析结果正误,分别给出不同信息
我用的switch case 语句来构建的编译器 通过对表达式的预测分析表 来实现正确情况,同步情况以及错误情况的分析,能够找出错误并继续执行。
执行方式:表达式+$结尾
若最后的符号是)则会运行出结果后退出,其他则继续执行。
例子:i+i$,i+i*(i+i)
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[20];
int len;
int index;
int error;
int right;
int left;
void E(); // E->TX;
void E_prime(); // X->+TX | e
void T(); // T->FY
void T_prime(); // Y->*FY | e
void F(); // F->(E) | i
void display();
int main() {
while(1) {
len=0;
index = 0;
error = 0;
right = 0;
left = 0;
/*----------- 输入表达式 ---------------*/
printf("请输入算数表达式:");
scanf("%s", str);
len = strlen(str);
E();
if (str[index] == '$'&& error == 0) {
if(left==right) {
printf("正确语句!\n");
}
if(left<right) {
printf("错误语句!缺少左括号!\n");
}
if(left>right) {
printf("错误语句!缺少右括号!\n");
}
} else {
if(left<right) {
printf("错误语句!缺少左括号!\n");
}
i