算符优先分析法实验报告.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算符优先分析法实验报告   实验任务:   对下述描述算符表达式的算符优先文法G[E],给出算符优先分析的实验结果。   E-E+T|E-T|TT-T*F|T/F|FF-(E)|i   说明:   优先关系矩阵的构造过程:   =关系   由产生式F-(E)知‘’   FIRSTVT集   FIRSTVT(E)={+,-,*,/,(,i}   FIRSTVT(F)={(,i}   FIRSTVT(T)={*,/,(,i}   LASTVT(E)={+,-,*,/,),i}   LASTVT(F)={),i}   LASTVT(T)={*,/,),i}   (2)关系   E+则有:LASTVT(E)+   E-则有:LASTVT(E)-   T*则有:LASTVT(T)*   T/则有:LASTVT(T)/   E)则有:LASTVT(E))   (4)优先关系矩阵   +-*/()i#   +   -   *   /   (   i   # 测试用例二:a+b*c-b*(a-b)#   运行结果二:   分析成功。   实验报告   实验题目:算符优先分析法   课程名称:编译原理   主讲教师:班级:实验日期:提交日期:   实验3《算符优先分析法设计与实现》   实验学时:2实验地点:实验日期:   一、实验目的   加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验内容   在实验1的基础上,用算符优先分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。   三、实验方法   先在算符栈置“$”,然后开始顺序扫描表达式,若读来的单词符号是操作数,这直接进操作数栈,然后继续读下一个单词符号。分析过程从头开始,并重复进行;若读来的是运算符θ2则将当前处于运算符栈顶的运算符θ1的入栈优先数f与θ2的比较优先函数g进行比较。四、实验步骤   1.定义目标语言的语法规则;   2.求解预测分析方法需要的符号集和分析表;   3.依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结   束;   4.对遇到的语法错误做出错误处理。五、实验结果   六、实验结论#include#include#include   chardata[20][20];//算符优先关系chars[100];//模拟符号栈scharlable[20];//文法终极符集charinput[100];//文法输入符号串charstring[20][10];//用于输入串的分析intk;chara;   intj;charq;intr;//文法规则个数intr1;   intm,n,N;//转化后文法规则个数charst[10][30];//用来存储文法规则   charfirst[10][10];//文法非终结符FIRSTVT集   charlast[10][10];//文法非终结符LASTVT集   intfflag[10]={0};//标志第i个非终结符的FIRSTVT集是否已求出intlflag[10]={0};//标志第i个非终结符的LASTVT集是否已求出intdeal();//对输入串的分析   intzhongjie(charc);//判断字符c是否是终极符   intxiabiao(charc);//求字符c在算符优先关系表中的下标voidout(intj,intk,char*s);//打印s栈   voidfirstvt(charc);//求非终结符c的FIRSTVT集voidlastvt(charc);//求非终结符c的LASTVT集voidtable();//创建文法优先关系表voidmain(){inti,j,k=0;   printf(请输入文法规则数:);scanf(%d,r);printf(请输入文法规则:\n);for(i=0;iZ){printf(不是算符文法!\n);exit(-1);}if(st[i][j]=Ast[i][j]=Ast[i][j+1]Z)st[i][j]!=-st[i][j]!=st[i][j]!=|)lable[k++]=st[i][j];}}   lable[k]=#;   lable[k+1]=\0;table();   printf(每个非终结符的FIRSTVT集为:\n);for(i=0;ir;i++){printf(%c:,st[i][0]);for(j=0;jfirst[i][0];j++){printf(%c,first[i][j+1]);}printf(\n);}   printf(每个非终结符的LASTVT集为:\

文档评论(0)

sanshengyuan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档