(完整word版)LR0分析器实验报告_第1页
(完整word版)LR0分析器实验报告_第2页
(完整word版)LR0分析器实验报告_第3页
(完整word版)LR0分析器实验报告_第4页
(完整word版)LR0分析器实验报告_第5页
免费预览已结束,剩余6页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、能通过定义的文法 G, G是一个LR (0)文法,输入源码,能够基本判别出该源码是否 是正确的。如果是正确的则接收,反之,如果是错误的则显示错误。四、实验步骤1 .类ALGOLF的文法<program> -> <Block><program> -><Compound Statement><Block> -> <Block head> ; <Compound Tail><Block head> ->begin<Block head> -><Block h

4、ead>d<Compound Tail> ->s;end<Compound Tail> ->s;<Compound Tail><Compound Statement> -> begin <Compound Tail>用小写字母表示终结符,大写字母表示非终结符b:begin d:d s:s e:endP:<Program>B:<Block>S:<Compound Statement>H:<Block head>T:<Compound Tail>则文法为:

5、2 P->B5H->H;d3 P->S6T->se4 B->H;T7T->s;T5 H->bd8S->bT2 .拓广后为G',增加产生式P'->p1 P'->P2 P->B3 P->S4 B->H;T5 H->bd6 H->H;d7 T->se8 T->s;T9 S->bT3 .项目集规范族:P -> PP-> BP-> SB-> - H;TH-> bdH-> - H;dT-> seT-> s;TP'->

6、;P P->B P->S B->H - ;TH->b dH->H - ;dT->s - eT->s - ;TB->H; TH->bd H->H; dT->se-T->s; TB->H;T -H->H;d T->s;T S-> bT S->b T S->bT 4 .LR (0)的分析表(s表不移进,r表不归约)状ACTIONGOTO态bdse;#PBSHT0S1212341acc2r2r2r2r2r2r23r3r3r3r3r3r34S55S7S86r4r4r4r4r4r47r6r6r6r6

7、r6r68S9S109r7r7r7r7r7r710S81111r8r8r8r8r8r812S14S81313r9r9r9r9r9r914r5r5r5r5r5r56.部分代码界面(为了便于客户体验)int menu()int n;printf("=n");printf(" 欢迎使用n");printf("1.显示文法信息n");printf("2.符号审判定n");printf("3.退出 n");printf("n");printf("=n");print

8、f("请选择你要执行的内容:n");scanf("%d",&n);getchar();return n;在main程序中可以直接调用void main()intt=1,n;char ch;while(t)n=menu();分析过程的实现void ActionTable(int sta, char symb,int col) /statu 用于状态栈,sym用于符号栈if(sta = 1 && col = 5)sta1 col5中存放 ACC 即表/示所输入的源码是该文法的语法。printf("t 接收 n");

9、IsAccept = 1; /IsAccept为 void 函数,如果/源码判断成功,则显示接收,/将IsAccept赋值为1,方便退出return;/ActionTable是 void 类型的if(actsta.stcol != 0)/存放移进操作/如果进行源码判断时,要进行移进操作,则直接将进行相应的栈操作printf("t 移进 n");sta+sta_Index = actsta.stcol;symbol+mark_Index = symb;exp_top +;else if(actsta.recol != 0) /存放归约操作printf("t 归约 n

10、");Reduce(sta, symb, col); /Reduce 为 void 函数,用来对进行归标准输入输出函数scnaf,printf关于字符数组的函数定义/else printf("t 错误 n");getchar(); / 使用到的头文件#include<stdio.h> /#include<string.h> /约的项进行相应操作,使用栈来进行 处理。从stdio流中读字符用实验结果(截图)请选择你要执行的内容;请选择你要执行的内容.rlXX 乂乂窜:乂乂冬玉乂乂多乂算玉算该文法为:0P->BP->SH >H

11、 id®T-se m- S->hT睛选择你要执行的内容:;esett步骤汪武源研必原通号盘尾?d; sell10趣鬻析过程一00129121494触5045804589945e3291符号栈«1) ItJbd ItH ttH; «H;s HH;se ItH; I ttB ItF剩余输入串川;等7d;sel ;sett ;seltefl$进斗进进约约约收 归3勺源科露吁程一有短0甘0126012144Ld04ttHR45廿H;剩余输入串bd;esett d;esett;esenr esetteseltis五、实验总结通过这次LR(0)分析器的实验,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握了 LR语法分析的方法。对于LR (0) 方法有了更深刻的了解,不蛋蛋只是纸上谈兵,实验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论