编译原理与技术讲义-第5章25616new.ppt

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

编译原理与技术 主要内容 自底向上语法分析概述 算符优先分析方法 LR分析方法 LALR分析器的生成工具yacc 5.1 自底向上语法分析概述 自底向上语法分析器的体系结构 本书介绍的自底向上的语法分析器明显地使用一个栈结构来执行语法分析 5.1 自底向上语法分析概述 包括四个组成: 记录语法分析信息和过程的语法分析栈; 被分析的输入符号串; 语法分析控制程序 表达文法结构和存储控制信息的语法分析表。 5.1 自底向上语法分析概述 控制程序自左向右地逐个扫描输入字符,对每一个分析栈元素和输入符号的二元组X,a,根据不同的语法分析表,执行下列四个动作之一: (1)移进 把输入串当前符号a读入栈顶,并把指针指向下一个输入符号; (2)规约 把自栈顶X向下的若干符号串用某个产生式的左端非终结符替换; (3)接受 宣布语法分析成功,此时栈指针指向栈内的维一符号——文法开始符,输入串指针指向结束符号$; (4)出错 发现源程序有错,调用出错处理程序。 由于自底向上语法分析的基本动作是移进输入字符或者归约符号串,有时也称之为移进-归约分析。 5.1 自底向上语法分析概述 5.1 自底向上语法分析概述 5.1 自底向上语法分析概述 有两个基本问题值得探讨: (1)如何确定是执行移进还是归约操作? 例如,当前输入符号同样是+,在第(5)行是移入栈顶的操作,而第(2)、(3)和(4)行却要进行归约。 (2)什么是可归约串?在什么条件下可以归约,哪个具体的产生式左部的非终结符可以替换(归约)符号串? 5.1 自底向上语法分析概述 对输入串i+i的算符优先归约过程 5.1 自底向上语法分析概述 短语、句柄和最左素短语 编译程序结构清晰、条理化而且便于高效地实现; 在设计高级语言时能独立地研究词法与语法两个方面的特性; 增强编译程序的可移植性:可以就同一个语言为不同的机器写不同的词法分析器,而只编写一个共同的语法分析,使用这些词法分析器相同的单词机内表示; 把同一个词法由于单词记号的语法可以用较简单的文法描述,把词法和语法分开,就能为这种文法建立有效的特殊方法和自动构造技术。 5.1 自底向上语法分析概述 短语、句柄和最左素短语 定义5.1: 令S是文法G的开始符号,αβγ是文法的一个句型,如果有 S ?* αPγ 并且P ? β, 则称β是句型αβγ相对于非终结符U的短语,其中α、β和γ是文法的符号串,α和γ可以为空,P是非终结符。特别地,如果有 U → β 则称β是句型αβγ相对于非终结符U的直接短语。 定义5.2: 一个句型的最左直接短语称为该句型的句柄。 定义5.3: 素短语是一个包含至少一个终结符的短语,并且除自身之外不再有更小的素短语。 5.1 自底向上语法分析概述 短语、句柄和最左素短语 5.1 自底向上语法分析概述 概念之间的关系以及对应的分析方法 自底向上分析过程的每一步就是寻找句型的最左直接短语(句柄)或者最左素短语,把它们作为可归约串进行归约的。 5.1 自底向上语法分析概述 规范规约过程 句柄总是在栈顶。 不断检查栈顶的符号串是否形成了新的句柄,如果是,就把句柄用相应产生式的左部符号替换; 如果栈顶没有形成句柄,就把把输入符号压在栈顶,直到在栈顶形成句柄; 直到把分析栈的符号替换成文法的开始符号。 5.1 自底向上语法分析概述 算符优先归约 不断地把栈顶的最左素短语规约成相应产生式的左部符号, 或者把输入符号压入栈顶,直到把分析栈的符号替换成文法的开始符号。 表5.4是对例5.1输入串i+i依据最左素短语的归约过程,句型中的斜体符号串代表该句型的最左素短语。 5.2 算符优先分析方法 算符优先文法 算符优先分析是一种分析过程比较迅速的自底向上的分析方法,特别有利于表达式的分析,便于手工实现。它不是一种严格的最左归约,即不是一种规范归约方法。在算符优先分析方法中,可归约串就是最左素短语。 所谓算符优先就是借鉴了程序语言中,表达式运算的不同优先顺序,在算符,即非终结符之间定义某种优先归约的关系,从而在句型中寻找可归约串。由于非终结符关系的定义和普通算术表达式的算符(如加减乘除)运算的优先关系一致,所以得名算符优先分析方法。 在例子5.3中,句型E+T*F+i的最左素短语是T*F,而E+T和F+i都不是短语(为什么?),表明首先把T*F归约,然后再归约符号+和左右符号组成的符号串。这种分析过程正好表示了算术表达式中乘除运算的优先级比加减运算的优先级要高。 5.2 算符优先分析方法 算符文法 定义 5.4:如果文法G中没有形如 U → ...PR... 的产生式,其中P和R都是非终结符,即任何产生式的右部都不含两个连续的非终结符,则称该文法为算符文法。 定理5.1:在算

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档