递归下降子程序
1、实验目的
实现递归下降子程序的功能。
2、语言描述
利用函数相互递归实现递归下降子程序的基础功能。
3、具体实现
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
char str[50];//输入要判断的字符串
int len;//字符串长度
int look=0;//记录下标
bool flag=false;//判断是否合法
void intput();
void next();
void output();
void E();
void E1();
void T();
void T1();
void F();
int main()
{
intput();
E();
output();
return 0;
}
void intput()
{
printf("文法如下:\n");
printf("G'[E]:(1) E->TE'\n (2) E'->+TE'|ε\n");
printf(" (3) T->FT'\n (4) T'->*FT'|ε\n (5) F->(E)|i\n");
printf("请输入要分析的字符串(以‘#’号结束):\n");
for(int i=0;i<50;i++)
{
scanf("%c",&str[i]);
if(str[i]=='#')
{
len=i;
break;
}
}
printf("\n");
}
void next()
{
if(look==len)
{
exit(0);
}
else
{
look++;
}
}
void E()
{
T();
E1();
}
void E1()
{
if(str[look]=='+')
{
next();
T();
E1();
}
}
void T()
{
F();
T1();
}
void T1()
{
if(str[look]=='*')
{
next();
F();
T1();
}
}
void F()
{
if(str[look]=='(')
{
next();
E();
if(str[look]==')')
{
next();
}
else
{
flag=true;
}
}
else if(str[look]=='i')
{
next();
}
else
flag=true;
}
void output()
{
printf("分析结果:字符串");
for(int i=0;i<len;i++)
{
printf("%c",str[i]);
}
if(flag==false)
printf("是合法的字符串\n");
else
printf("是非法的字符串\n");
}
4、实验截图