编译原理实验报告解析.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验报告解析

编译原理课程设计报告 选题名称: LL(1)文法 院(系): 计 算 机 工 程 学院 专 业: 计算机科学与技术 班 级: 姓 名: 学 号: 指导教师: 年月号 目录 目录 I 摘要 II 1.设计内容及要求 1 2实现原理 2.1 判断左递归…………………………………………………………………1 2.2 计算first集合算法………………………………………………………..2 2.3 计算follow集合算法……………………………………………………..3 2.4 预测分析过程算法……………………………………………………….4 3.详细设计实现及关键代码………………………………………………………….5 3.1程序总流程图...................................................................................................6 3.2导入文件 6 3.3判断左递归 6 3.4 FIRST集合的计算 7 3.5 FOLLOW集的计算 9 3.6构造预测分析表 10 3.7 LL1预测分析过程 11 4.程序调试部分截图 14 5.课设总结 16 6.参考文献 18 摘要: 编译程序一般由词法分析器、语法分析器、语义分析程序、中间代码产生程序、目标代码生成程序、代码优化等组成,其中最主要的应该是语法分析,它是编译过程的核心部分。语法分析是在词法分析识别出的Token单词符号串的基础上,分析并判断程序的语法结构是否符合语法规则。而语言的语法结构式用上下文无关文法描述的,这与形式语言的学习有很大的关系。语法分析的本质是按文法的产生式,求出First、Follow集以及预测分析表这就是语法分析也就是此次LL(1)文法分析课程设计的主要内容。 具体实现流程即对读入文法进行初始化的处理,删除无用的符号句子,然后进行相应的消除左递归,以及消除间接左递归,并且对公因子进行提取,对文法分析,然后得到文法的First、Follow集以及分析预测表,然后对输入的句子进行分析,通过出栈入栈进行比较得出是否分析成功,然后通过表格将结果显示出来,还有分析的过程,每一步入栈出栈等演示出来。 关键字:左递归、First、Follow集、预测分析表 正文: 一. 设计内容及要求 (1) 基于PL/0语言,通过编程判断该文法是否为LL(1)文法; (2)计算出文法的First() Follow() (3)构造相应文法的预测分析表 (4)对某个输入句子进行语法分析 二. 实现原理 1.LL(1)文法 LL(1)文法是一类可以进行确定的自顶向下语法分析的文法。就是要求描述语言的文法是无左递归的和无回溯的。根据LL(1)文法的定义,对于同一非终结符A的任意两个产生式A:=a和A:=b,都要满足:SELECT(A:=a )∩SELECT(A:=b)=?。 (1)文法的左递归 当一个文法是左递归文法时,采用自顶向下分析法会使分析过程进入无穷循环之中。所以采用自顶向下语法分析需要消除文法的左递归性。文法的左递归是指若文法中对任一非终结符A有推导A(A…,则称该文法是左递归的。 左递归又可以分为直接左递归和间接左递归。 ● 直接左递归 若文法中的某一产生式形如A→Aα,α∈V*,则称该文法是直接左递归的。 消除直接左递归的方法: 设有产生式是关于非终结符A的直接左递归:A→Aα|β (α,β∈V*,且β不以A开头) 对A引入一个新的非终结符A′,把上式改写为: A →βA′ A′→αA′|ε ● 间接左递归 若文法中存在某一非终结符A,使得A(A…至少需要两步推导,则称该文法是间接左递归的。 消除间接左递归的方法: 【方法一】采用代入法把间接左递归变成直接左递归。 【方法二】直接改写文法:设有文法G10[S]: S→Aα|β ⑴ A→Sγ ⑵ 因为S(Aα(Sγα,所以S是一个间接递归的非终结符。为了消除这种间接左递归,将⑵式代入⑴式,即可得到与原文法等价的文法(可以证明): S→Sγα|β ⑶ ⑶式是直接左递归的,可以采用前面介绍的消除直接左递归的方法,对文法进行改写后可得文法:S→

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档