首页 > 代码库 > 递归下降分析实验报告
递归下降分析实验报告
实验四:语法分析实验
一、 实验目的
编写递归下降分析语法分析程序。
二、 实验内容和要求
输入:输入算术表达式以“#”结束
输出:是否分析成功
三、 实验方法、步骤及结果测试
1. 源程序名:压缩包文件(rar或zip)中源程序名
语法分析.c
可执行程序名:语法分析.exe
2. 原理分析及流程图
主要总体设计问题。
(包括存储结构,主要算法,关键函数的实现等)
E→TX
X→(+T|-T)X|ε
T→FY
Y→(*F|/F)Y|ε
F→(E)|i
3. 主要程序段及其解释:
#include<stdio.h> #include<string.h> char str[10]; int index=0; void E(); //E->TX; void X(); //X->+TX|-TX|ε void T(); //T->FY void Y(); //Y->*FY |/FY|ε void F(); //F->(E) | i int i(); //i int main() { int len; int m; printf("请输入要测试的次数:"); scanf("%d",&m); printf("输入表达式以#结束\n"); while(m--) { printf("\n请输入算数表达式:"); scanf("%s",str); len=strlen(str); str[len]=‘#‘; str[len+1]=‘\0‘; E(); printf("分析成功!\n"); strcpy(str,""); index=0; } return 0; } void E() { T(); X(); } void X() { if(str[index]==‘+‘) { index++; T(); X(); } else if(str[index]==‘-‘) { index++; T(); X(); } } void T() { F(); Y(); } void Y() { if(str[index]==‘*‘) { index++; F(); Y(); } else if(str[index]==‘/‘) { index++; F(); Y(); } } void F() { if(i()) { index++; } else if (str[index]==‘(‘) { index++; E(); if(str[index]==‘)‘) { index++; }else{ printf("分析失败!\n"); exit (0); } } else{ printf("分析失败!\n"); exit(0); } } int i() { if(str[index]>=‘0‘&&str[index]<=‘9‘) { while( str[index+1]>=‘0‘&&str[index+1]<=‘9‘ ) { index++; } if(str[index+1]>=‘a‘&&str[index+1]<=‘z‘ ) return 0; return 1; } else if(str[index]>=‘a‘&&str[index]<=‘z‘ ) { return 1; } else return 0; }
4. 运行结果及分析
四、 实验总结
一开始不太会写,参考了网上的一些资源
通过学习了语法分析,再经过实验,让我对语法分析有一定的认识和了解。递归下降分析法,是
一种确定的自顶向下分析技术,它的实现思想是,对文法中分别代表一种语法成分的每个非终结符号编写
一个子程序,已完成非终结符号所对应的语法成分的分析任务。在分析过程中调用一系列过程或函数,对
源程序进行语法语义分析直到整个程序处理结束。
递归下降分析实验报告
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。