《编译原理》课程实验报告
实验名称:递归下降分析法
一.实验目的
1.理解递归下降语法分析方法的主要原理
2.理解递归下降分析法对文法的要求
3.熟练掌握Predict集合的求法
4.熟练掌握文法变换算法(消除左递归和消除公共前缀)
二.实验内容
#include <stdio.h>
char token[20];
char sym;
int p;
void S();
void T();
void U();
void Scanner();
void Error();
void S()
{
if (sym == 'a' || sym == '^')
Scanner();
else if (sym == '(')
{
Scanner();
T();
if (sym == ')')
Scanner();
else Error();
}
else Error();
}
void T()
{
S();
U();
}
void U()
{
if (sym == ',')
{
Scanner();
S();
U();
}
else if(sym != ')')
Error();
}
void Scanner()
{
sym = token[p++];
}
void Error()
{
//exit(0);
}
int main()
{
printf("输入: ");
gets(token);
p = 0;
Scanner();
S();
if (sym == '$')
printf("Success!");
else
printf("Fail!");
return 0;
}
三.实验步骤
调试程序的结果:
四.总结与回顾
通过这次实验让我对编译原理这门课程有更深层次的了解,不仅只是停留在理论知识这个层面。
这次做的是递归下降分析法,实验过程中也遇到了一些问题,比如说:变量没有定义,函数没有声明,写程序的过程中有的语法错误有的if 和else不匹配等等
这些问题,但是最后一一得到了解决,通过这些问题让我学到了很多东西,对递归下降分析法有了一个更深入的了解,也复习了以前的知识。