LR 分析方法程序设计原理与实现技术实验报告及源代码 北京交通大学.doc

LR 分析方法程序设计原理与实现技术实验报告及源代码 北京交通大学.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
. .. LR 分析方法程序设计原理与实现技术 XXX 1028XXX 计科1XXX班 程序功能描述 ` 通过设计、编写和构造LR(0)项目集规范簇和LR 分析表、对给定的符号串进行LR 分析的程序,了解构造LR(0)分析表的步骤,对文法的要求,能够从文法G 出发生成LR(0)分析表,并对给定的符号串进行分析。要求以表格或图形的方式实现。 实现LR(0)分析法,完成以下文法。 G[E]: E→aA∣bB A→cA∣d B→cB∣d 2. 设计要求 (1)构造LR(0)项目集规范簇;要求输入LR(0)文法时,可以直接输入,也可以读取文件,并能够以表格的形式输出项目集规范簇集识别活前缀的有穷自动机(2)构造LR(0)分析表。要求要求输入LR(0)文法时,可以直接输入,也可以读取文件;输出项目集规范簇,可以调用前一处理部分的结果,输出为LR(0)分析表(3)LR(0)分析过程【移进、归约、接受、报错】的实现。要求调用前一部分处理结果的分析表,输入一个符号串,依据LR(0)分析表输出与句子对应的语法树,或直接以表格形式输出分析过程。 3. 主要数据结构描述: 文法表示,项目集规范族表示以及文法接受的符号和移植到的位置: struct struct grammar{ //文法 char left; vectorstring right; }; struct grammar1{ char left; vectorstring right; int sign; }; struct define{ int data; char type; }; struct progect{ //项集 vectorgrammar1 data; //数据 vectorchar acc; //可接受的符号 vectordefine next; //转移到的位置 }; vectorgrammar lge; //文法 vectorprogect pro; //项目集规范族 4. 程序结构描述 本程序一共有10个功能函数: void get(); //获取文法 void print(); //打印文法 void fun(); //构造LR(0)项目集规范族 void analy(); //构造LR(0)分析表 void test(); //测试文法 int equal(progect p1,progect p2); //判断两项是否相等 int findpoint(string str); //判断点的位置是否在最后,是的话就是规约项目 int findlocal(string str); //寻找此符号串对应的规范族的位置 char gettype(char ch,int num); //根据状态集,返回操作的类别(移近,规约,接受) int getnumber(char ch,int nun); //根据状态机,返回下一步所跳转的状态集 5. 实验代码 详见附件 6. 程序测试 6.1功能测试 程序运行后显示如下功能菜单: 选择获取文法: 选择打印文法: 选择构造LR(0)项目集规范族: 选择构造LR(0)分析表: 6.2文法测试 分析失败:aAcAd 分析成功:acd 7. 实验总结: 本次实验按照书上的相应步骤,一步一步按照要求来完成实现,最终文成了给定文法的分析程序。首先是获取文法,文法的获取是采用直接输入的方法,保存成预先设定的结构体,然后根据文法,对文法编号,求出项目集规范族,然后再构造LR(0)分析表,最后根据分析表来判断输入符号串是否为此文法产生的语言。 这次实验花费的时间比较长,因为用c语言在编写项目集族以及构造分析表的算法都遇到了一些困难,需要再实验中边写边学习。在完成实验后,我对LR(0)文法有了更加深入的了解。 // lr0.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #include iostream #include string #include vector using namespace std; struct grammar{ //文法 char left; vectorstring right; }; struct grammar1{ char left; vectorstring right; int sign; }; struct define{ int data; char type; }; struct progect{ //项目集 vectorgrammar1 data; //数据 vectorchar acc;

文档评论(0)

hkfgmny + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档