递归下降分析程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归下降分析程序相关的知识,希望对你有一定的参考价值。
实验一、递归下降程序分析实验
专业:商业软件2班 姓名:蔡瑞奇 学号:20150611061
一、 实验目的
练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力
二、 实验内容和要求
利用c语言构造语法分析程序
三、 实验方法、步骤及结果测试
源程序名:压缩包文件(rar或zip)中源程序名×××.c
可执行程序名:×××.exe
- 1. 原理分析及流程图
主要总体设计问题。
(包括存储结构,主要算法,关键函数的实现等)
·用户输入一段表达式,然后调用S这个函数,如果遇到a或^这两个字符的话,就跳到下一个字符,否则如果是左括号的话,就读取下一个字符并调用这个T函数,在T函数里面又调用了S和X这两个函数,同样的,在X函数里,先判断是不是‘,’如果不是,读取下一个字符,然后再调用S和X两个函数。
- 2. 主要程序段及其解释:
实现主要功能的程序段,重要的是程序的注释解释。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[10];
int index=0;
void S();
void X();
void T();
main()
{
int len;
int m;
printf("请输入要测试的次数:\\n");
scanf("%d",&m);
while(m--)
{
printf("请输入表达式:\\n");
scanf("%s",str);
len=strlen(str);
str[len]=‘#‘;
str[len+1]=‘\\0‘;
S();
printf("语句正确!\\n");
strcpy(str,"");
index=0;
}
return 0;
}
void S()
{
if(str[index]==‘a‘||str[index]=‘^‘)
{
index++;
}
else if(str[index]==‘(‘)
{
index++;
T();
if(str[index]==‘)‘)
{
index++;
}
else
{
printf("分析失败!");
exit(0);
}
}
else
{
printf("分析失败!");
exit(0);
}
}
void T()
{
S();
X();
}
void X()
{
if(str[index]==‘,‘)
{index++;
S();
X();
}
else
{
printf("分析失败!\\n");
exit(0);
}
}
- 3. 运行结果及分析
一般必须配运行结果截图,结果是否符合预期及其分析。
(截图需根据实际,截取有代表性的测试例子)
感觉这个结果和我想要的不大一样,每次输入一个a的时候,最后的结果老是能够得到正确的结果,例如像a????这样的语句它也能够提示正确,反正它第一个输入的只要是a就会提示正确。
一、 实验总结
心得体会,实验过程的难点问题及其解决的方法。
个人感觉这个不难,只是用递归函数就可以做了,不过难的是在那些函数里面如何去判断条件,这个才是重难点,因为本身编译原理就难,再加上没有太多的电脑知识基础,所以写出来的程序还是有些问题的。
以上是关于递归下降分析程序的主要内容,如果未能解决你的问题,请参考以下文章