编译原理LL1文法实验_第1页
编译原理LL1文法实验_第2页
编译原理LL1文法实验_第3页
编译原理LL1文法实验_第4页
编译原理LL1文法实验_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二:自上而下语法分析一、 实验目的和要求根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。(选做)根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。(必做)本次实验的目的主要是加深对自上而下分析法的理解。二、 实验内容1.功能描述:LL(1)分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。对下列文法,对任意输入的符号串进行分析:(1)E->TG(2)G->+TG (3)G->(4)T->FS(5)S->*FS(6)S->(7)F->(E

2、)(8)F->i输入一以#结束的符号串(包括+*/()i#):输出结果:包括分析栈、数组中的剩余字符串以及所用的产生式,形如:分析栈剩余输入串所用产生式Ei+i*i#E->TG设计思想及算法:2.程序结构描述:2.1参数含义struct Stackchar s30;int top; /栈顶指针S1;char b20;char v16='i','+','*','(',')','#'/终结符char v25='E','G','T','S

3、','F'/非终结符 /*用二维数组保存预测分析表,可用符号来代替,注意字符串结束位自动加'0' */2.2返回值描述void print()/*无返回值 */int iszhongjie(char X )返回数组下标int feizhongjie(char f )返回数组下标bool chabiao(char X,char sym)bool型返回false和true2.3函数功能void print()/*输出分析栈 */int iszhongjie(char X ) 判断X是否为终结符,是返回数组下标int feizhongjie(char f )

4、判断X是否为非终结符,是返回数组下标bool chabiao(char X,char sym) 判断X是否为非终结符,sym是否为终结符,若是查找预测表对应表格是否为空白,是则出错,否则进栈fopen  文件打开函数,返回指向文件第一个字符的指针2.4函数之间的调用关系图3.程序源代码/用二维数组保存预测分析表char table564="TG"," "," ","TG"," "," "," ","+TG"," &q

5、uot;," ","","","FS"," "," ","FS"," "," "," ","","*FS"," ","","","i"," "," ","(E)"," "," "/

6、查表函数,在预测分析表中判断X是否为非终结符,sym是否为终结符,若是查找预测表对应表格是否为空白,是则出错,否则进栈int m=feizhongjie(X );int n=iszhongjie(sym);char str10; strcpy(str,tablemn);if (strlen(str)=0)/cout<<"匹配失败!"<<endl;return false;elseif (str0!='')for (int i=strlen(str)-1;i>=0;i-) push(stri);print();cout<&l

7、t;'t'<<v2m<<"->"<<str<<endl;return true;主函数:根据表中的产生式,对栈顶元素根据情况进行移进匹配操作,知道剩余表达式中无非终结符为止,即匹配成功。否则,则匹配失败,给出的字符表达式无法由给定的文法推出。int main() printbiao();/ifstream file("D:111.txt");/file.getline(b,sizeof file);FILE *fp; char sym,X; bool flag,cuo; if(fp=f

8、open("D:111.txt","r")=NULL) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符 fprintf(stderr,"读取文件失败!n"); exit(1); intialstack();push('#');push('E');sym=fgetc(fp);/把第一个输入符号读进symflag=true;cuo=false;print();cout<<endl;while (flag&&!error) X=pop();if (X='#

9、9;) flag=false;cout<<"匹配成功"<<endl;else if(iszhongjie(X)!=-1) sym=fgetc(fp);else if(!chabiao(X,sym) cuo=true; return 0;三、实验过程记录:出错次数3次、出错严重程度不高、解决办法摘要:第一次错误是语法错误,加括号改正第二次读取文件的文件位置写错第三次是函数调用错误,改错。实验结果截图:i+i*i#i*(i+i)#四、实验总结:本次实验较上次稍难,主要是移近匹配已经判断的思想和流程要充分的理解到位。虽然,老师课上已经讲解了许多,而且实验时也指导了我们一些该注意的地方,但是,在真正编程的过程中还是遇到了许多问题,比如说,如何用一个数组实现让字符串逆序进栈,以及文件的读取和存取内容

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论