- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 Part4语法的分析
数据库原理与Oracle——SQL语言 Part4语法分析 授课:胡静 语法分析器的作用 以语法分析器为核心的编译器模型 语法分析器所处的位置 语法分析的例子 语法分析的类比 针对自然语言的语法分析: 识别一个句子是不是符合语法规范识别每一个成分的功能。 语法分析器的作用 接收词法分析器提供的记号串 检查记号串是否能由源程序语言的文法产生 用易于理解的方式提示语法错误信息,并能从常见的错误中恢复过来 语法分析器工作原理 语言的结构是用上下文无关文法描述的,因此,语法分析器的工作本质上就是按照文法的产生式,识别输入符号串是否为一个句子。 语法分析器是从左向右的扫描输入字符串,每次读入一个符号,并判断,看是否能从文法的开始符号出发推导出这个输入串。或者,从概念上讲,就是要建立一棵与输入串匹配的语法分析树。 语法分析器分类 通用的语法分析方法,用来分析任何文法,生成编译器时效率太低 编译器使用的语法分析方法—处理文法的一些子类 自顶向下(建立分析树)—LL文法,其分析器常用手工实现 自底向上(建立分析树)—LR文法,其分析器常利用自动生成工具构造 自顶向下分析面临的困难 自顶向下分析面临的困难 自顶向下分析的主旨是,对任何输入串,试图用一切可能的办法,从文法的开始符号(根结)出发,自顶向下的为输入串建立一棵语法树。 这种分析过程本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的过程。 自顶向下分析的一般方法是带“回溯”的。 自顶向下分析的简单例子 假定文法G[S],以及输入串x*y(记为α)。 S→xAy A→**|* 初始化: 第一步扩展 自顶向下分析的简单例子 假定文法G[S],以及输入串x*y(记为α)。 S→xAy A→**|* 第二步扩展: 回溯 自顶向下分析方法的特点 困难 我们希望通过读取下一个符号就确定要使用哪一个产生式。 S → E+S | E E → num | (S) 这样做很难,这个文法不能够通过向前看一个符号的自顶向下分析方法来进行语法分析 LL(1)分析法 自顶向下分析存在的问题及解决方法 左递归文法 消除直接左递归 消除直接左递归-提取左因子 消除直接左递归——改写成右递归 直接左递归的消除 消除左递归的算法 如果一个文法不含回路(形如P=+P的推导),也不含以ε为右部的产生式,那么执行下述算法将保证消除左递归(但改写后的文法可能含有ε为右部的产生式)。 消除左递归的算法 消除左递归的例子 回溯问题 消除回溯的途径 消除回溯、提取左因子 令G是一个不含左递归的文法,对G的所有非终结符的每个候选α定义它的终结首符集FIRST(α)为: FIRST(α)={a | α=*a…, a∈VT} 若α=*ε,则规定ε∈FIRST(α) FIRST(α)是α的所有可能推导的开头终结符或可能的ε 如果非终结符A的所有候选首符集两两不相交,即A的任何两个不同候选αi和αj FIRST(αi) ∩FIRST(αj)=Φ 那么当要求A匹配输入串时,A就能根据它所面临的第一个输入符号a,准确的指派某一个候选前去执行任务。这个候选就是那个终结首符集含a的α。 消除回溯、提取左因子 提取左因子的方法 假定A的规则是: A→δβ1 |δβ2 | … |δβn |γ1 |γ2 | … |γm (其中,每个γ不以δ开头) 那么这些规则可以改写为: A→δA’ |γ1 |γ2 | … |γm A’→β1 |β2 | … |βn 经过反复提取左因子,就能够把每个非终结符(包括新引进者)的所有候选首符集便成为两两不相交。我们为此要付出的代价是大量引进新的非终结符和ε产生式。 消除回溯的方法二 文法的两个条件 扩充的巴科斯范式 前面的巴科斯范式只用到了两个元符号“→”和“|” 扩充几个元语言符号: 用花括号{α}表示闭包运算α*。 用{α}n0表示α可任意重复0次至n次。{α}00={α}0=ε. 用方括号[α]表示{α}10,即表示α的出现可有可无(等价于α |ε)。 例如,通常的“实数”可定义为: decimal→[sign]integer.{digit}[exponent] exponent→E[sign]integer integer→digit[digit] sign→+ | - 递归下降分析程序的构造 当文法满足上述两个文法条件时,我们就可以为它构造一个不带回溯的自顶向下分析程序,这个分析程序是由一组递归过程组成的。每个过程对应文法的一个非终结符。这样的一个分析程序称为递归下降分析器。 递归下降分析程序构造 LL(1)分析法 LL(1)分析法 LL(1)分析法 LL(1)分析法 LL(1)分析法 LL(1)分析法 LL(1)分析法 LL(1)
您可能关注的文档
最近下载
- ICD-9-CM-3手术与操作国家临床版亚目表.xlsx VIP
- 图形创意(第二版)林家阳 高教 全套课件.ppt
- Unit 2 Helping at home 第1课时 Get ready(教学课件)英语外研版三起四年级上册(新教材).ppt
- 大数据精准营销PPT课件.pptx VIP
- 天线与电波传播课件(第六章)电波传播概论.ppt VIP
- 公司目视化管理手册..pptx VIP
- 非遗工艺数字化呈现的2025年文化传承项目阶段汇报PPT.pptx VIP
- 演讲与口才中职全套完整教学课件.pptx
- CNG及LNG加气站风险管控资料.doc VIP
- 一种拉曼-荧光双模生物传感器及其制备方法与其在miRNA检测中的应用.pdf VIP
文档评论(0)