预测分析法.docx

上传人:叶*** 文档编号:36044161 上传时间:2022-08-25 格式:DOCX 页数:7 大小:11.95KB
返回 下载 相关 举报
预测分析法.docx_第1页
第1页 / 共7页
预测分析法.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《预测分析法.docx》由会员分享,可在线阅读,更多相关《预测分析法.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验二 基于预测方法的语法分析程序的设计一、实验目的了解预测分析器的基本构成及用自顶向下的预测法对表达式进行语法分析的方法,掌握预测语法分析程序的手工构造方法。二、实验内容1、了解编译程序的基于预测方法的语法分析过程。2、根据预测分析原理设计一个基于预测方法的语法分析程序。三、实验要求对给定文法GS:S-AT A-BU T-+AT|$ U-*BU|$ B-(S)|m其中,$表示空串。1、判断上述文法GS是否LL(1)文法,若不是,将其转变为LL(1)文法;2、对转变后的LL(1)文法建立预测分析表;3、根据清华大学出版编译原理教材教材第五章P94的图5.11手工构造预测分析程序;4、用预测分析

2、程序对任意给定的键盘输入串m+m*m#进行语法分析,并根据栈的变化状态输出给定串的具体分析过程。四、运行结果从任意给定的键盘输入串:m+m*m#;输出:用预测分析法分析符号串m+m*m#的过程StepStackStringRuleStepStackStringRule1#Sm+m*m#S-AT10#TUmm*m#M匹配2#TAm+m*m#A-BU11#TU*m#U-*BU3#TUBm+m*m#B-m12#TUB*m#*匹配4#TUmm+m*m#M匹配13#TUBm#B-m5#TU+m*m#U-$14#TUmm#M匹配6#T+m*m#T-+AT15#TU#U-$7#TA+m*m#+匹配16#T#

3、T-$8#TAm*m#A-BU17#接受9#TUBm*m#B-m五、提示本实验重点有两个:一是如何用适当的数据结构实现预测分析表存储与使用;二是如何实现各规则右部串的逆序入栈处理。建议:使用结构体数组。六、分析与讨论1、若输入串不是指定文法的句子,会出现什么情况?2、总结预测语法分析程序的设计与实现的一般方法。代码:#include#include#include#includestruct stack1 char stack10;sta7= 0,+,*,(,),m,#, S,0,0,AT,0,AT,0, A,0,0,BU,0,BU,0, T,+AT,0,0,$,0,$, B,0,0,(S),

4、0,m,0, U,$,*BU,0,$,0,$/struct stack *head;char stack_110=0,stack_210=0,stack_310=0;int i,j,k,len_1,len_2,len_3,mark=0;void main()/ void c_stack(); void analyze_stack(); void surplus_str(); int rules();/ printf(%st,sta01.stack);/ printf(n); while(1)/ system(cls);mark=0; printf(请输入串:n); gets(stack_3);

5、 if(stack_30=0) break; stack_10=S; len_3=strlen(stack_3); if(stack_3len_3-1!=#) printf(字符串输入错误,字符串不以#号结束!n); continue; printf(分析栈tt剩余串tttttt规则n); for(i=0;i=100;i+) analyze_stack(); surplus_str(); rules(); if(mark=1) break; if(stack_10=0&stack_30=#) printf(#tt#tttttt成功接受n); break;void analyze_stack()

6、/分析栈 printf(#%-15s,stack_1); len_1=strlen(stack_1);void surplus_str()/剩余串/注意拼写的正确性,写成surlpus_str()报错,unresolved sxternal symbol_surplus_str; printf(%-48s,stack_3);int rules()/所用规则 int p,q,h; char temp;/ printf(%d,len_1); if(stack_1len_1-1=stack_30) printf(%c匹配n,stack_30); stack_1len_1-1=0; for(h=1;h

7、=len_3-1;h+) stack_3h-1=stack_3h; stack_3len_3-1=0; else if(stack_1len_1-1Z) printf(报错n); mark=1; return 0; else if(stack_1len_1-1=A&stack_1len_1-1=Z) for(j=1;j=6) printf(报错n); mark=1; return 0; for(k=1;k=7) printf(报错n); mark=1; return 0; if(stapq.stack0=0) printf(报错n); mark=1; return 0; strcpy(stack_2,stapq.stack); len_2=strlen(stack_2); printf(%c-%sn,stack_1len_1-1,stack_2); stack_1len_1-1=0; if(stack_20=$) else for(h=0;hlen_2/2;h+) temp=stack_2h; stack_2h=stack_2len_2-1-h; stack_2len_2-1-h=temp; strcat(stack_1,stack_2); return 0;第 7 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁