LR0分析器实验报告(共10页).doc

上传人:飞****2 文档编号:7633010 上传时间:2022-02-28 格式:DOC 页数:10 大小:292KB
返回 下载 相关 举报
LR0分析器实验报告(共10页).doc_第1页
第1页 / 共10页
LR0分析器实验报告(共10页).doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

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

1、精选优质文档-倾情为你奉上 编译原理 课程设计性实验报告课程题目: LR(0)分析法姓 名: 钟继文 专业班级: 计算机科学与技术(1)班指导老师: 孙长圣老师学 号: 9报告日期: 2015年6月7日编译原理语法分析实验报告1、 实验内容 利用C语言编写一个程序,对字符串进行语法分析,了解掌握实验的原理及方法,要求该文法为LR(0)文法。2、 实验目的 LR(K)分析方法是1965年Knuth提出的,括号中的K表示向右查看输入串符号的个数。对于大多数用无二义性上下文无关文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、及时地指出出错位置。它的主要缺点是对于

2、一个实用语言文法的分析器的构造工作量相当大,K愈大构造愈复杂,实现相当困难。LR分析法是一种自底向上分析方法。它的分析过程是一种规范归约过程,规范归约是规范推导的逆过程。规范推导是最右推导,规范归约是其逆过程,则是最左归约。 LR分析法的可归约串是当前句型的句柄,即最左直接短语。对于大多数用无二义性上下文无关文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、及时地指出出错位置。本实验通过设计、调试一个简单的的LR分析器,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。3、 实验功能 通过定义的文法G,G是一个LR(0)

3、文法,输入源码,能够基本判别出该源码是否是正确的。如果是正确的则接收,反之,如果是错误的则显示错误。 4、 实验步骤1 类ALGOLF的文法 - - - ; -begin -;d -s;end -s; - begin 用小写字母表示终结符,大写字母表示非终结符b:begin d:d s:s e:endP:B:S:H:T:则文法为:1 P-B 5 H-H;d 2 P-S 6 T-se 3 B-H;T 7 T-s;T 4 H-bd 8 S-bT2 拓广后为G,增加产生式 P-p1 P-P 2 P-B3 P-S4 B-H;T5 H-bd6 H-H;d7 T-se8 T-s;T9 S-bT3.项目集规

4、范族: P-P P-P P-B P-B P-S P-S B-H;T B-H;T B-H;T B-H;T H-bd H-bd H-bd H-H;d H-H;d H-H;d H-H;d T-se T-se T-se T-s;T T-s;T T-s;T T-s;T S-bT S-bT S-bT 4.LR(0)的分析表(s表示移进,r表示归约)状态ACTIONGOTObdse;#PBSHT0S1212341acc2r2r2r2r2r2r23r3r3r3r3r3r34S55S7S86r4r4r4r4r4r47r6r6r6r6r6r68S9S109r7r7r7r7r7r710S81111r8r8r8r8r

5、8r812S14S81313r9r9r9r9r9r914r5r5r5r5r5r56.部分代码n 界面(为了便于客户体验) int menu() int n; printf(=n); printf(-欢迎使用-n); printf(1.显示文法信息n); printf(2.符号串判定n); printf(3.退出n); printf(-n); printf(=n); printf(请选择你要执行的内容:n); scanf(%d,&n); getchar(); return n;在main程序中可以直接调用。void main() int t=1,n;char ch; while(t) n=men

6、u(); n 分析过程的实现void ActionTable(int sta, char symb,int col) /statu用于状态栈,sym用于符号栈 if(sta = 1 & col = 5) /sta1 col5中存放ACC,即表 /示所输入的源码是该文法的语法。 printf(t接收n); IsAccept = 1; /IsAccept为void函数,如果 /源码判断成功,则显示接收, /将IsAccept赋值为1,方便退出。 return; /ActionTable是void类型的 if(actsta.stcol != 0) /存放移进操作 /如果进行源码判断时,要进行移进操作

7、,则直接将进行相应的栈操作 printf(t移进n); sta+sta_Index = actsta.stcol; symbol+mark_Index = symb; exp_top +; else if(actsta.recol != 0) /存放归约操作 printf(t归约n); Reduce(sta, symb, col); /Reduce为void函数,用来对进行归 /约的项进行相应操作,使用栈来进行 /处理。 else printf(t错误n); getchar(); /从stdio流中读字符用 n 使用到的头文件#include /标准输入输出函数 scnaf,printf#in

8、clude /关于字符数组的函数定义 n 实验结果(截图)5、 实验总结 通过这次LR(0)分析器的实验,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握了LR语法分析的方法。对于LR(0)方法有了更深刻的了解,不蛋蛋只是纸上谈兵,实验的完成,也就是实践的过程。虽然在这个实践的过程中遇到了许多的困难,但是在老师和同学的帮助下,最终还是将实验初步完成。完成的LR(0)分析器只能对于一个特定的文法进行判断,完整的是要求能够对于任一一中LR(0)文法都能够进行判断,在这方面上还需要对程序有进一步的了解才能够最终实现,通过后续的努力,终能够将LR(0)分析器完整实现。专心-专注-专业

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

当前位置:首页 > 应用文书 > 教育教学

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

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