LL(1)语法分析实验报告(共6页).doc

上传人:飞****2 文档编号:12183413 上传时间:2022-04-24 格式:DOC 页数:6 大小:66KB
返回 下载 相关 举报
LL(1)语法分析实验报告(共6页).doc_第1页
第1页 / 共6页
LL(1)语法分析实验报告(共6页).doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《LL(1)语法分析实验报告(共6页).doc》由会员分享,可在线阅读,更多相关《LL(1)语法分析实验报告(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上LL(1)语法分析实验报告一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,检查语法错误,进一步掌握常用的语法分析方法。二、实验内容构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子。程序要求为该文法构造预测分析表,并按照预测分析算法对输入串进行语法分析,判别程序是否符合已知的语法规则,如果不符合则输出错误信息。消除递归前的文法 消除递归后的等价文法 EE+T ETE ET E+TE| TT*F TFT TF T*FT| F(E)|i F(E)|i根据已建立的分析表,对下列输

2、入串:i+i*i进行语法分析,判断其是否符合文法。三、实验要求1.根据已由的文法规则建立LL(1)分析表;2.输出分析过程。请输入待分析的字符串: i+i*i 符号栈 输入串 所用产生式 #E i+i*i# ETE #ET i+i*i# TFT #ETF i+i*i# Fi #ETi i+i*i# #ET +i*i# T #E +i*i# E+TE #ET+ +i*i# #ET i*i# TFT #ETF i*i# Fi #ETi i*i# #ET *i# T*FT #ETF* *i# #ETF i# Fi #ETi i# #ET # T #E # E # #四、程序思路模块结构:1、定义部分

3、:定义常量、变量、数据结构。2、初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体等);3、运行程序:让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则;4、利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示简单的错误提示。五、程序流程图输入要分析的串判断输入串是否正确判断分析句型是否完全匹配?成功失败否是是否八、程序调试与测试结果运行后结果如下:九、实验心得递归下降分析法是确定的自上而下分析法,这种分析法要求文法是LL(1)文法。它的基本思想是,对文法中的每个终结符编写一个函数(或子程序

4、),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数(或子程序)必然以相互递归的方式进行调用。当然实验中我也发现了自己的不足之处,我会在今后的学习生活中努力提高自己的编程水平.附件:程序清单:/* 程序名称: LL(1)文法分析程序 */* E-E+T|T */* T-T*F|F */* F-(E)|i */* 程序相关说明 */* A=E B=T */* 0=E 1=E 2=T 3=T 4=F */* 0=i 1=+ 2=* 3=( 6=) 4=# */#includeiostream.h#include stdio.h#i

5、nclude malloc.h#include conio.hstruct Lcharchar char_ch;struct Lchar *next;Lchar,*p,*h,*temp,*top,*base;char curchar;char curtocmp;int right;int table58=1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0;int i,j;void push(char pchar)temp=(struct Lchar*)malloc(sizeof(Lchar);temp-char_ch=pcha

6、r;temp-next=top;top=temp;void pop(void)curtocmp=top-char_ch;if(top-char_ch!=#)top=top-next;void doforpush(int t)switch(t)case 0:push(A);push(T);break;case 5:push(A);push(T);break;case 11:push(A);push(T);push(+);break;case 20:push(B);push(F);break;case 23:push(B);push(F);break;case 32:push(B);push(F)

7、;push(*);break;case 40:push(i);break;case 43:push();push(E);push();void changchartoint()switch(curtocmp)case A:i=1;break;case B:i=3;break;case E:i=0;break;case T:i=2;break;case F:i=4;switch(curchar)case i:j=0;break;case +:j=1;break;case *:j=2;break;case (:j=3;break;case ):j=4;break;case #:j=5;void d

8、osome(void)int t;for(;)pop();curchar=h-char_ch;printf(n%ct%c,curchar,curtocmp);if(curtocmp=# & curchar=#)break;if(curtocmp=A|curtocmp=B|curtocmp=E|curtocmp=T|curtocmp=F)if(curtocmp!=#)changchartoint();if(tableij)t=10*i+j;doforpush(t);continue;elseright=0;break;elseif(curtocmp!=curchar)right=0;break;

9、elsebreak;elseif(curtocmp!=curchar)right=0;break;elseh=h-next;continue;void main(void)char ch;cout* 文件名称: 语法分析endl;cout endl;cout/* 程序相关说明 */endl; cout-endl; cout-/* A=E B=T */endl; cout-* 目的:对输入LL(1)文法字符串,本程序能自动判断所给字符串是-endl; cout-*否为所给文法的句子,并能给出分析过程。 -endl; cout-*-endl; cout表达式文法为:endl; coutE+T|Te

10、ndl; coutT*F|Fendl; cout(E)|iendl; cout请在下行输入要分析的串(#号结束):next=NULL;base-char_ch=#;temp=(struct Lchar*)malloc(sizeof(Lchar);temp-next=base;temp-char_ch=E;top=temp;h=(struct Lchar*)malloc(sizeof(Lchar);h-next=NULL;p=h;doch=getch();putch(ch);if(ch=i|ch=+|ch=-|ch=*|ch=/|ch=(|ch=)|ch=#)temp=(struct Lchar*)malloc(sizeof(Lchar);temp-next=NULL;temp-char_ch=ch;h-next=temp;h=h-next;elsetemp=p-next;printf(nInput a wrong char!Input again:n);for(;)if (temp!=NULL)printf(%c,temp-char_ch);elsebreak;temp=temp-next;while(ch!=#);p=p-next;h=p;dosome();if(right)printf(n成功!n);elseprintf(n错误!n);getch();专心-专注-专业

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

当前位置:首页 > 教育专区 > 教案示例

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

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