递归下降分析程序
实验一、递归下降分析实验
专业 商业软件 姓名 李嘉嘉 学号201506110247
一、 实验目的
练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力。
二、 实验内容和要求
利用c语言构造语法分析程序。
三、 实验方法、步骤及结果测试
- 原理分析及流程图
对于给定的文法:
E—> a E’
E’—> = T
T—> F F’
F—> ( F’) | F’
F’—> bK
K—> +F’ | -F’| ;
- 主要程序段及其解释:
#include<stdio.h>
#include<string.h>
char str[50]; //要分析的字符串
int ch=0;
void scaner();
void E();
void E2();
void T();
void F();
void F2();
void K();
void error();
main()
{
int len;
printf("请输入算数表达式:");
scanf("%s",str);
len=strlen(str);
str[len]='#';
E();
strcpy(str,"");
}
void scaner()
{
ch++;
}
void E()
{
if(str[ch]=='a')
{
scaner();
printf("E() ");
E2();
}
else error();
}
void E2()
{
if(str[ch]=='=')
{
printf("E2() ");
scaner();
T();
}
else error();
}
void T()
{
printf("T() ");
F();
F2();
}
void F()
{
if (str[ch]=='(')
{
printf("F() ");
scaner();
F2();
if(str[ch]==')')
{
scaner();
F2();
}
}
else if(str[ch]=='b')
{
printf("F() ");
F2();
}
}
void F2()
{
if(str[ch]=='b')
{
printf("F2() ");
scaner();
K();
}
}
void K()
{
if(str[ch]=='+'||str[ch]=='-')
{
printf("K() ");
scaner();
F2();
}
else if (str[ch]!=';')
error();
else if(str[ch]==';')
printf("正确");
}
void error()
{
printf("\n错误!\n");
}
- 运行结果及分析

四、 实验总结
要清楚文法规则。

浙公网安备 33010602011771号