- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
语法和语义分析
第六章 引言 第五六章 语法和语义分析 6.5 LL(K)分析方法 LL(K)分析方法是一种自顶向下的分析技术 这种分析方法是从左到右扫描源程序(输入串),同时从识别符号开始生成句子的最左推导,向前看K个符号,便能确定当前应选用怎样的规则。 当K=1时,即是LL(1)分析法 实验二 LL(1)分析法(选做) 实验目的:根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。 估计实验时间: 1.课余准备20小时; 2.上机二次4小时; 3.完成实验报告5小时。 实验规定对下列文法,用LL(1)分析法对任意输入的符号串进行分析: (1)E::=TG (2)G::=+TG (3)G::=ε (4)T::=FS (5)S::=*FS (6)S::=ε (7)F::=(E) (8)F::=i do/*读入分析串*/ { scanf(%c,ch); if ((ch!=i) (ch!=+) (ch!=*)(ch!=()(ch!=))(ch!=#)) { printf(输入串中有非法字符\n); exit(1); } B[j]=ch; j++; }while(ch!=#); l=j;/*分析串长度*/ ch=B[0];/*当前分析字符*/ A[top]=#; A[++top]=E;/*#,E进栈*/ printf(步骤\t\t分析栈 \t\t剩余字符 \t\t所用产生式 \n); do { x=A[top--];/*x为当前栈顶字符*/ printf(%d,k++); printf(\t\t); } } for(j=0;j=5;j++)/*判断是否为终结符*/ if(x==v1[j]) { flag=1; break; } if(flag==1)/*如果是终结符*/ { if(x==#) { finish=1;/*结束标记*/ printf(acc!\n);/*接受 */ getchar(); getchar(); exit(1); } if(x==ch) { print(); print1(); printf(%c匹配\n,ch); ch=B[++b];/*下一个输入字符*/ flag=0;/*恢复标记*/ } else/*出错处理*/ { print(); print1(); printf(%c出错\n,ch);/*输出出错终结符*/ exit(1); } } else/*非终结符处理*/ { for(j=0;j=4;j++) if(x==v2[j]) { m=j;/*行号*/ break; } for(j=0;j=5;j++) if(ch==v1[j]) { n=j;/*列号*/ break; } cha=C[m][n]; if(cha.origin!=N)/*判断是否为空*/ { print(); print1(); printf(%c-,cha.origin);/*输出产生式*/ for(j=0;jcha.length;j++) printf(%c,cha.array[j]); printf(\n); for(j=(cha.length-1);j=0;j--)/*产生式逆序入栈*/ A[++top]=cha.array[j]; if(A[top]==^)/*为空则不进栈*/ top--; } void print()/*输出分析栈 */ { int a;/*指针*/ for(a=0;a=top+1;a++) printf(%c,A[a]); printf(\t\t);
文档评论(0)