编译原理LL文法源代码.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、实验目的及要求 掌握LL(1)分析法的基本原理; 掌握LL(1)分析表的构造方法; 用 LL(1)分析法分析高级语言表达式。 4、了解LL(1)分析器的工作过程。文法:无二义性的算术表达式的文法 把词法分析作为语法分析的子程序实现(5 分) 独立的语法分析程序(4 分) 对表达式文法消除左递归、构造LL(1)分析表 LL(1)分析表可以直接输入(4 分),也可以用程序实现(5 分) 给一个表达式,给出分析过程(分析栈、输入串、所用规则)(4 分) 生成一个棵语法树(5 分)用二叉树的形式表示出来 二、实验内容及原理1、 实验原理 、LL(1)文法的定义 LL(1)分析法属于确定的自顶向下分析方法。LL(1)的含义是:第一个 L 表明自顶向下分析是从左向右扫描输入串,第2 个 L 表明分析过程中将使用最左推导,1 表明只需向右看一个符号便可决定如何推导,即选择哪个产生式(规则)进行推导。 LL(1)文法的判别需要依次计算FIRST 集、FOLLOW 集和SELLECT 集,然后判断是否为LL(1) 文法,最后再进行句子分析。 需要预测分析器对所给句型进行识别。即在LL(1)分析法中,每当在符号栈的栈顶出现 非终极符时,要预测用哪个产生式的右部去替换该非终极符;当出现终结符时,判断其与剩 余输入串的第一个字符是否匹配,如果匹配,则继续分析,否则报错。LL(1)分析方法要求文法满足如下条件:对于任一非终极符 A 的两个不同产生式A??,A??,都要满足下面条件: SELECT(A??)∩SELECT(A??)=? 、预测分析表构造 LL(1)分析表的作用是对当前非终极符和输入符号确定应该选择用哪个产生式进行推 导。它的行对应文法的非终极符,列对应终极符,表中的值有两种:一是产生式的右部的字符串,一是null。若用M 表示 LL(1)分析表,则M 可表示如下: M: VN×VT?P∪{Error} M(A, t) = A?α,当t?select(A?α) ,否则M(A, t) = Error 其中 P 表示所有产生式的集合。 、语法分析程序构造 LL(1)分析中X 为符号栈栈顶元素,a 为输入流当前字符,E 为给定测试数据的开始符号, #为句子括号即输入串的括号。分析表用一个二位数组 M 表示,数组元素 M[A,a]中的下标 A 表示非终结符,a 为终结符或句子括号‘#’,二维数组中存放的是一条关于A 的产生式,表明当非终结符A 向下推导时,面临输入符 a 时,所采用的候选产生式,当元素内容无产生式时,则表明用 A 的左部向下推导时出现了不该出现的符号,因此元素内容转向出错处理的信息。 LL(1)分析过程主要包括以下四个动作: 替换:当X?VN 时选相应产生式的右部?去替换 X。此时X 出栈,?逆序入栈。 匹配:当X?VT 时它与a 进行匹配,其结果可能成功,也可能失败,如果成功则符号栈中将 X 退栈并将输入流指针向前移动一位,否则报错。 接受:当格局为(#,空#)时报告分析成功。 报错:出错后,停止分析。并给出相应的错误提示信息。 2、实验内容 根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。 对下列文法,用LL(1)分析法对任意输入的符号串进行分析: (1)E-TG (2)G-+TG (3)G-ε (4)T-FS (5)S-*FS (6)S-ε (7)F-(E) (8)F-i 程序输入一以#结束的符号串(包括+*()i#),如:i+i*i#。 三、实验过程及步骤 1. 总体思路分析及流程图 给定一个正规文法G,在 LL(1)预测分析中,必须先求出First 集和Follow 集, 构造预测分析表。求出预测分析表之后,再输入一个字符串,依据 LL1 分析表单步输出字符串的分析过程。 读取正规文法 读取正规文法 求文法的First集 求文法的Follow集 求文法的Select集 键盘输入字符串 字符串分析 功能模块分解图 (1)主程序流程图 开始 开始 输入文法 判断文法是否为 LL(1)文法 Y N 构造预测分析 表 输入要分析的 符号串 出错处理 出错处理 N 判断该符号串是否可被 该文法识别 Y 提示i*i+i#为可接受的字符串 结束 (2)核心算法流程图 计算非终结符的First 集的算法及流程: First 集合的构造算法: 若X∈VT,则 First(X)={X}。 若X∈VN,且有产生式X→a……,则把a 加入到First (X)中;若X→ε也是一条产生式,则把ε也加到First (X)中。 若 X→Y……是一个产生式且 Y∈VN,则把 First (Y)中的所有非ε-元素都加到First (X)中;若X→Y1Y2…Yk 是一个产生

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档