LL1语法分析程序.docx
《LL1语法分析程序.docx》由会员分享,可在线阅读,更多相关《LL1语法分析程序.docx(29页珍藏版)》请在第壹文秘上搜索。
1、编译原理上机试验报告题目:1.1.(I)语法分析程序1 .设计要求(1)对输入文法,它能推断是否为1.1.(I)文法,若是,则转(2):否则报错并终止;(2)输入已知文法,由程序自动生成它的1.1.(D分析表:(3)对于给定的输入串,应能推断识别该串是否为给定文法的句型。2 .分析该程序可分为如下几步:(1)读入文法(2)推断正误(3)若无误,推断是否为1.1.(D文法(4)若是,构造分析表;(5)由总控算法推断输入符号串是否为该文法的句型。3 .流程图ftincludeintcount=0;/*分解的产生式的个数*/charstart:*起先符号*/chartermin50;*终结符号*/c
2、harnon_ter50;/*非终结符号*/charv50;/*全部符号*/charleft50:/*左部*/charright5050;/*右部*/intnumber;/*全部终结符和非终结符的总数*/charfirst5050,follow5050;/*各产生式右部的FIRST和左部的FO1.1.OW集合*/charfirst!5050;*全部单个符号的FIRST集合*/charselect5050;/*各单个产生式的SE1.ECT集合*/charf50,F50;/*记录各符号的FIRST和FO1.1.OW是否已求过*/charempty20;/*记录可干脆推出C的符号*/charTEMF
3、j50;/*求FO1.1.OW时存放某一符号串的FIRST集合*/intvalidity=l;/*表示输入文法是否有效*/int11=1;/*表示输入文法是否为1.1.(I)文法*/intM2020;/*分析表*/*用户输入时运用*/charchoose;charempt20;*求_emp()时运用*/charfo20;*求FO1.1.OW集合时运用*/推断一个字符是否在指定字符串中intin(charc,char*p)/inti;size_ti;if(strlen(p)=0)return(0);for(i=0;i+)if(pi=c)return(1);*若在,返回1*/if(i=strlen
4、(p)return(0);*若不在,返回0*/得到一个不是非终结符的符号charc()charc=,;while(in(c,non_ter)=l)c+;return(c);分解含有左递归的产生式voidrecur(char*point)/*完整的产生式在point口中*/intj,m=0,n=3,k:chartemp20,ch;ch=cO;*得到一个非终结符*/k=strlen(non_ter):non_terk=ch;non_terk+l=,0,:for(j=0;size_t(j)=strlen(point)-1;j+)if(pointn=point0)*假如I后的首符号和左部相同*/for
5、(j=n+l;size_t(j)=strlen(point)-1;j+)while(pointj!=,j,&pointj!三,0,)tempm+=pointj+;leftcount=ch;memcpy(rightcount,temp,m);rightcountm=ch:rightcountm+l,0,;m=0;count+;if(pointj=I,)n=j+l;break:else*假如I后的首符号和左部不同*/leftcount=ch:rightcount0=,;rightcount1,0,;count+;for(j=n:size_t(j)tempEm+=pointj:elseleftcou
6、nt=point0;memcpy(rightcount,temp,m);rightcountm=ch:rightcountm+l=0;printf(*count=%d*,count);m=0;count+:leftcount=point0;memcpy(rightcount,temp,m):rightcountm=ch;rightcountm+l=,0,:count+;m=0;分解不含有左递归的产生式voidnon_re(char*point)intm=0,J;chartemp20;for(j=3;size_t(j)=strlen(point)-1;j+)if(pointj!三,)tempm+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LL1 语法分析 程序