网站大量收购闲置独家精品文档,联系QQ:2885784924

北邮编译原理语法范例.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理语法分析实验报告 班级:2013211307 学号:2013211353 姓名:陈剑南 目录 1.实验题目及要求 2.递归调用预测分析实现自顶向下分析 3.实验 实验题目及要求 题目:语法分析程序的设计与实现。? 实验内容:编写语法分析程序,实现对算术表达式的语法分析。要求所分析算术表达式由如下的文法产生。? E-E+T | E-T | T T-T*F | T/F | F F-id | (E) | num 实验要求:在对输入表达式进行分析的过程中,输出所采用的产生式。? 方法1:编写递归调用程序实现自顶向下的分析。? 方法2:编写LL(1)语法分析程序,要求如下。? ?编程实现算法4.2,为给定文法自动构造预测分析表。? 编程实现算法4.1,构造LL(1)预测分析程序。? 方法3:编写语法分析程序实现自底向上的分析,要求如下。? ?构造识别所有活前缀的DFA。? 构造LR分析表。? (3)?编程实现算法4.3,构造LR分析程序。? 方法4:利用YACC自动生成语法分析程序,调用LEX自动生成的词法分析程序。 递归调用预测分析实现自顶向下分析 消除文法左递归 文法改写为: E-TE E-EE|ε E-+T|-T T-FT T-TT|ε T-*F|/F F-id|num|(E) 状态图: (3)化简后得 3.实验结果 (1)1+3 A*3 (3)3+(出错) 实验心得 本次实验我是用的是递归下降分析方法,分析过程基本同书上的过程一样,消除左递归与状态转移图均是在纸上完成,只是用代码完成了递归分析过程。 总体来说该方法比较简单,分析过程也比较清楚。 遗憾在于:本想使用LR或是LL分析方法。 5.源程序 /* *本题使用的是第一种方法 *通过递归调用程序实现自顶向下的分析 *1.首先消除左递归 *得到: * E-TE E-EE|ε E-+T|-T T-FT T-TT|ε T-*F|/F F-id|num|(E) *2.化简状态转换图 *3.实现预测分析 */ #includeiostream #includestring #includestdlib.h #includestdio.h using namespace std; int i;//全局变量,确定被判断的字符在字符串中的位置 int procE(string str, int i); int procT(string str, int i); int procF(string str, int i); int procE(string str, int i) { int result; cout \t\tE-TE\n; if (str[i] != $) {//递归T的过程 if (procT(str, i) == 1) { if (str[i] == + || str[i] == -) { cout \t\tE-EE\n; cout str[i] \t\t; if (str[i] == +) cout E-+T\n; else cout E--T\n; i++; result = procT(str, i);//调用T的过程 if (str[i] == $ || str[i] == )) { cout \t\tE-ε\n; } } else if (str[i] == $ || str[i] == )) { cout \t\tE-ε\n; result = 1; } else{ result = -1; } } else result = -1; } else result = 1; return result; } int procT(string str, int i) { int result; cout \t\tT-FT\n; if (procF(str, i) == 1) { if (str[i] == * || str[i] == /) { cout \t\tT-TT\n; cout str[i] \t\t

文档评论(0)

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

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

1亿VIP精品文档

相关文档