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

编译原理 教学课件 作者 康慕宁 林奕 讲稿_3.ppt

编译原理 教学课件 作者 康慕宁 林奕 讲稿_3.ppt

  1. 1、本文档共101页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 语法分析与前后文无关文法 基本知识 编译程序的扫描器从输入的源程序字符流中识别出程序设计语言的单词,即语言中的终结符号。 由扫描器所定义的语言是单词的集合,即词法级的程序设计语言。 语法分析程序实际上是一个下推自动机(PDA: Push-Down Automata),它识别一个语言的短语结构——语言的单词如何组合成语法正确的程序。 多数程序设计语言允许嵌套的句法结构,这样的语言可由前后文无关文法定义,因此被称为前后文无关语言(CFL: Context-Free Language)。 事实上,每个PDA识别的语言都是CFL。这个结论可由本章将要介绍的从PDA构造CFG(Context-Free Grammar)的规则得出。由PDA接受的语言相应CFG的每个产生式与PDA的一个转换对应。 本章主要内容 由确定的PDA接受的、被称为是由LL(1)文法定义的语言。 LL(1)语言可由确定的、自顶向下的分析程序识别,且在识别过程中,每次最多向前搜索1个输入符号即可确定下一步的分析动作。 LL分析表示自左至右扫描、最左推导(from Left to Right and Leftmost Derivation)的语法分析。 我们还将介绍一种目前最常用的一种自底向上的语法分析文法——LR分析法。 3.1下推自动机 (Push-Down Automata) 【定义3·1】一个下推自动机形式上被定义为一个七元组: 其中, ?:输入符号表; Q:有限状态集合; H:下推栈字母表; h0(∈H):开始符号,即开始时下推栈中放置的符号; q0(∈Q):开始状态; F(?Q):终止状态集; ?:Q×(??{?})×H ? Q×H*是描述状态转换的函数。 转换函数的含义 输入符号表元素可以作为栈符号表元素(??H??),栈可以有任意的深度。 转换规则集?是从状态集、输入符号集、栈符号集到状态及栈符号串的部分函数。 每步转换都将从栈中顶出一个符号,并重新将零个或多个栈符号压入栈。 转换规则与有限自动机的转换规则类似,如 PDA的终止(停机)可有两种方式 1)空栈方式 在扫描完输入串时,若栈内为空,则PDA终止; 2)终态方式 若输入串扫描完毕且栈顶状态是一个终止状态(∈F),则PDA终止。 对于以上两种终止方式,PDA均接受输入。 若PDA在未达到终态或未空栈情况下扫描完输入串,则拒绝该输入。 非确定的PDA 与FA一样,PDA也可以是非确定的。 非确定的PDA与确定的PDA的区别在于,对于任何给定的格局,它有多于一个的可能转换规则。 PDA实例 【例3·1】设P0=({a,b,c},{A,B,C},?,{h,i},i,A,?)是一确定的下推自动机,其中,?的定义如下: ?(A,a,i)=(B,h); ?(A,c,i)=(A,?); ?(B,a,h)=(B,hh); ?(B,c,h)=(C,h); ?(C,b,h)=(C,?) PDA P0识别所有由文法{S→aSb|c}定义的语言的句子(符号串),即由c隔开的相等个数的a与b组成的符号串。 图3-1中描述了PDA P0识别输入符号串aacbb的过程中,当其扫描到输入字符c时的状态。 P0识别aacbb的整个识别过程见图3-2所示。 3.1.1 停机条件的等价性 对于每个以终止状态方式停机的PDA,我们都可以构造一个等价的以空栈方式停机的PDA,反之亦然。 设P1是一个空栈停机的PDA,即它的终止状态集F=?。我们构造一个新的PDA P2,P2与P1基本相同,其区别在于P2比P1多两个附加的状态qf(用于描述终止状态)、qg(用于描述开始状态),一个附加的栈符号hf(用于描述初始栈符号)以及附加的转换规则。 规则1 ?( qg,?, hf)=(q0,h0hf) 规则2 ?(qi,?, hf)=( qf, hf) qi∈Q1 由空栈PDA构造终态PDA 上述附加的第一条转换规则在不读入任何符号的情况下,将P1中的初始栈符号压到栈顶,并且将状态转换到P1的初始状态。 然后,P2完全模拟P1进行工作,直到P1进入到空栈的情况为止。 此时,P2的栈内还有一个新加入的符号hf 。 根据第二条附加的规则,无论P1进入什么状态qi,P2将会再进行一步状态转换?(qi ,?, hf)=( qf, hf),从而使P2进入到状态hf,这恰好就是P2引入的终止状态。 若P1的输入符号串已空,因P1当前已是空栈,则P1接受这个输入串;对应地,这时因P2的输入符号串已空,且所进入的状态是P2的终止状态,所以P2亦接受这个输入; 反之,若P1在栈空情况下输入符号串尚为空,则P1,P2都因尚未识别结束而不能停机。 另外,由于P2新引入的状态、栈符号及转换规则都不可能影响P1的工作,所以,P2与P1是

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档