递归下降分析实验报告
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归下降分析实验报告相关的知识,希望对你有一定的参考价值。
实验四:语法分析实验
一、 实验目的
编写递归下降分析语法分析程序。
二、 实验内容和要求
输入:输入算术表达式以“#”结束
输出:是否分析成功
三、 实验方法、步骤及结果测试
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. 运行结果及分析
四、 实验总结
一开始不太会写,参考了网上的一些资源
通过学习了语法分析,再经过实验,让我对语法分析有一定的认识和了解。递归下降分析法,是
一种确定的自顶向下分析技术,它的实现思想是,对文法中分别代表一种语法成分的每个非终结符号编写
一个子程序,已完成非终结符号所对应的语法成分的分析任务。在分析过程中调用一系列过程或函数,对
源程序进行语法语义分析直到整个程序处理结束。
以上是关于递归下降分析实验报告的主要内容,如果未能解决你的问题,请参考以下文章