欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载
     

    编译原理语法分析3.ppt

    • 资源ID:4526685       资源大小:2.27MB        全文页数:283页
    • 资源格式: PPT        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理语法分析3.ppt

    第三章 语法分析,本章内容上下文无关文法自上而下分析和自下而上分析围绕分析器的自动生成展开,3.1 上下文无关文法,3.1.1 上下文无关文法的定义正规式能定义一些简单的语言,能表示给定结构的固定次数的重复或者没有指定次数的重复例:a(ba)5,a(ba)*正规式不能用于描述配对或嵌套的结构例1:配对括号串的集合例2:wcw|w是a和b的串,3.1 上下文无关文法,上下文无关文法是四元组(VT,VN,S,P)VT:终结符集合VN:非终结符集合S:开始符号P:产生式集合,产生式形式:A 例(id,+,(,),expr,op,expr,P)expr expr op expr expr(expr)expr expr expr idop+op,3.1 上下文无关文法,简化表示expr expr op expr|(expr)|expr|idop+|简化表示E E A E|(E)|E|idA+|,3.1 上下文无关文法,3.1.2 推导 把产生式看成重写规则,把符号串中的非终结符用其产生式右部的串来代替例 E E+E|E E|(E)|E|id E E(E)(E+E)(id+E)(id+id)概念上下文无关语言、等价的文法、句型记号S*、S+w,3.1 上下文无关文法,例 E E+E|E E|(E)|E|id 最左推导E lm E lm(E)lm(E+E)lm(id+E)lm(id+id)最右推导(规范推导)E rm E rm(E)rm(E+E)rm(E+id)rm(id+id),3.1 上下文无关文法,3.1.3 分析树例 E E+E|E E|(E)|E|id,E,E,(,),E,E,E,+,id,id,3.1 上下文无关文法,3.1.4 二义性E E E E E+E id E E E+E id E+E id E+E id id+E id id+E id id+id id id+id,3.2 语言和文法,文法的优点 文法给出了精确的,易于理解的语法说明自动产生高效的分析器可以给语言定义出层次结构以文法为基础的语言的实现便于语言的修改文法的问题文法只能描述编程语言的大部分语法,3.2 语言和文法,3.2.1 正规式和上下文无关文法的比较正规式(a|b)*ab文法A0 a A0|b A0|a A1A1 b A2A2,3.2 语言和文法,3.2.2 分离词法分析器理由为什么要用正规式定义词法 词法规则非常简单,不必用上下文无关文法对于词法记号,正规式描述简洁且易于理解从正规式构造出的词法分析器效率高,3.2 语言和文法,从软件工程角度看,词法分析和语法分析的分离有如下好处简化设计编译器的效率会改进编译器的可移植性加强便于编译器前端的模块划分,3.2 语言和文法,能否把词法分析并入到语法分析中,直接从字符流进行语法分析若把词法分析和语法分析合在一起,则必须将语言的注解和空白的规则反映在文法中,文法将大大复杂注解和空白由自己来处理的分析器,比注解和空格已由词法分析器删除的分析器要复杂得多,3.2 语言和文法,3.2.3 验证文法产生的语言G:S(S)S|L(G)=配对的括号串的集合,3.2 语言和文法,3.2.3 验证文法产生的语言G:S(S)S|L(G)=配对的括号串的集合按推导步数进行归纳:推出的是配对括号串归纳基础:S 归纳假设:少于n步的推导都产生配对的括号串归纳步骤:n步的最左推导如下:S(S)S*(x)S*(x)y,3.2 语言和文法,3.2.3 验证文法产生的语言G:S(S)S|L(G)=配对的括号串的集合按串长进行归纳:配对括号串可由S推出归纳基础:S 归纳假设:长度小于2n的都可以从S推导出来归纳步骤:考虑长度为2n(n 1)的w=(x)yS(S)S*(x)S*(x)y,3.2 语言和文法,3.2.4 适当的表达式文法用一种层次观点看待表达式id id(id+id)+id id+idid id(id+id)文法expr expr+term|termterm term factor|factor factor id|(expr),3.2 语言和文法,expr expr+term|termterm term factor|factor factor id|(expr),id+id id分析树,id id id分析树,3.2 语言和文法,3.2.5 消除二义性stmt if expr then stmt|if expr then stmt else stmt|other 句型:if expr then if expr then stmt else stmt两个最左推导:stmt if expr then stmt if expr then if expr then stmt else stmtstmt if expr then stmt else stmt if expr then if expr then stmt else stmt,3.2 语言和文法,无二义的文法stmt matched _stmt|unmatched_stmtmatched_stmt if expr then matched_stmt else matched_stmt|otherunmatched_stmt if expr then stmt|if expr then matched_stmt else unmatched_stmt,3.2 语言和文法,3.2.6 消除左递归文法左递归A+Aa 直接左递归AAa|b 串的特点 ba.a消除直接左递归A b AA a A|,3.2 语言和文法,例 算术表达文法E E+T|T(T+T.+T)T T F|F(F F.F)F(E)|id消除左递归后文法 E TE E+TE|T FT T F T|F(E)|id,3.2 语言和文法,非直接左递归S Aa|b A Sd|先变换成直接左递归S Aa|bA Aad|bd|再消除左递归S Aa|bA bd A|AA adA|,3.2 语言和文法,3.2.7 提左因子有左因子的文法A 1|2提左因子A AA 1|2,3.2 语言和文法,例 悬空else的文法 stmt if expr then stmt else stmt|if expr then stmt|other提左因子stmt if expr then stmt optional_else_part|otheroptional_else_part else stmt|,3.2 语言和文法,3.2.8 非上下文无关的语言构造L1=wcw|w属于(a|b)*标识符的声明应先于其引用的抽象 L2=anbmcndm|n 0,m 0 形参个数和实参个数应该相同的抽象 L3=anbncn|n 0 早先排版描述的一个现象的抽象,3.2 语言和文法,L1=wcwR|w(a|b)*S aSa|bSb|c L2=anbmcmdn|n 1,m 1 S aSd|aAdA bAc|bcL 2=anbncmdm|n 1,m 1 S ABA aAb|abB cBd|cd,3.2 语言和文法,L3=anbn|n 1 S aSb|abL3是不能用正规式描述的语言的一个范例 若存在接受L3 的DFA D,状态数为k个 设D读完,a,aa,ak 分别到达状态s0,s1,sk至少有两个状态相同,例如是si和sj,则ajbi属于L3,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|1,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|1短语文法,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|11型文法:|,但S 可以例外短语文法,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|11型文法:|,但S 可以例外短语文法、上下文有关文法,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|11型文法:|,但S 可以例外2型文法:A,AVN,(VN VT)*短语文法、上下文有关文法,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|11型文法:|,但S 可以例外2型文法:A,AVN,(VN VT)*短语文法、上下文有关文法、上下文无关文法,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|11型文法:|,但S 可以例外2型文法:A,AVN,(VN VT)*3型文法:A aB或A a,A,BVN,a VT 短语文法、上下文有关文法、上下文无关文法,3.2 语言和文法,3.2.9 形式语言鸟瞰文法 G=(VT,VN,S,P)0型文法:,,(VN VT)*,|11型文法:|,但S 可以例外2型文法:A,AVN,(VN VT)*3型文法:A aB或A a,A,BVN,a VT 短语文法、上下文有关文法、上下文无关文法、正规文法,3.2 语言和文法,例L3anbncn|n 1的上下文有关文法S aSBC S aBC CB BCaB ab bB bbbC bccC ccanbncn的推导过程如下:S*an-1S(BC)n1用S aSBC n-1次S+an(BC)n 用S aBC 1次S+anBnCn用CB BC交换相邻的CBS+anbBn1Cn用aB ab 1次S+anbnCn 用bB bb n-1次S+anbncCn-1用bC bc 1次S+anbncn用cC cc n-1次,3.3 自上而下分析,3.3.1 自上而下分析的一般方法例文法S aCbC cd|c为输入串w=acb建立分析树,不能处理左递归,3.3 自上而下分析,不能处理左递归的例子 算术表达文法E E+T|TT T F|FF(E)|id,E,3.3 自上而下分析,3.3.1 自上而下分析的一般方法例文法S aCbC cd|c为输入串w=acb建立分析树,不能处理左递归、复杂的回溯技术,3.3 自上而下分析,3.3.1 自上而下分析的一般方法例文法S aCbC cd|c为输入串w=acb建立分析树,不能处理左递归、复杂的回溯技术、回溯导致语义工作推倒重来,3.3 自上而下分析,3.3.1 自上而下分析的一般方法例文法S aCbC cd|c为输入串w=acb建立分析树,不能处理左递归、复杂的回溯技术、回溯导致语义工作推倒重来、难以报告出错的确切位置,3.3 自上而下分析,3.3.1 自上而下分析的一般方法例文法S aCbC cd|c为输入串w=acb建立分析树,不能处理左递归、复杂的回溯技术、回溯导致语义工作推倒重来、难以报告出错的确切位置、效率低,3.3 自上而下分析,3.3.2 LL(1)文法 对文法加什么样的限制可以保证没有回溯?先定义两个和文法有关的函数FIRST()=a|*a,a VT 特别是,*时,规定 FIRST()对A的任何两个不同选择i 和j,希望有FIRST(i)FIRST(j)=若FIRST(i)或 FIRST(j)含,还需增加条件,3.3 自上而下分析,3.3.2 LL(1)文法 对文法加什么样的限制可以保证没有回溯?先定义两个和文法有关的函数FIRST()=a|*a,a VT 特别是,*时,规定 FIRST()FOLLOW(A)=a|S*Aa,aVT如果A是某个句型的最右符号,那么$属于FOLLOW(A),3.3 自上而下分析,LL(1)文法任何两个产生式A|都满足下列条件:FIRST()FIRST()=若*,那么FIRST()FOLLOW(A)=例如,对于下面文法,面临a时不知用什么规则S A BA a b|a FIRST(ab)FOLLOW(A)B a CC,3.3 自上而下分析,LL(1)文法任何两个产生式A|都满足下列条件:FIRST()FIRST()=若*,那么FIRST()FOLLOW(A)=LL(1)文法有一些明显的性质没有公共左因子不是二义的不含左递归,3.3 自上而下分析,例 E TE E+TE|T FT T FT|F(E)|idFIRST(E)=FIRST(T)=FIRST(F)=(,id FIRST(E)=+,FRIST(T)=,FOLLOW(E)=FOLLOW(E)=),$FOLLOW(T)=FOLLOW(T)=+,),$FOLLOW(F)=+,),$,3.3 自上而下分析,3.3.3 递归下降的预测分析为每一个非终结符写一个分析过程这些过程可能是递归的例type simple|id|array simple of typesimple integer|char|num dotdot num,3.3 自上而下分析,一个辅助过程void match(terminal t)if(lookahead=t)lookahead=nextToken();else error();,3.3 自上而下分析,void type()if(lookahead=integer)|(lookahead=char)|(lookahead=num)simple();else if(lookahead=)match();match(id);else if(lookahead=array)match(array);match();simple();match();match(of);type();else error();,type simple|id|array simple of type,3.3 自上而下分析,void simple()if(lookahead=integer)match(integer);else if(lookahead=char)match(char);else if(lookahead=num)match(num);match(dotdot);match(num);else error();,simple integer|char|num dotdot num,3.3 自上而下分析,3.3.4 非递归的预测分析,3.3 自上而下分析,分析表的一部分,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,预测分析器接受输入id*id+id的前一部分动作,3.3 自上而下分析,3.3.5 构造预测分析表(1)对文法的每个产生式A,执行(2)和(3)(2)对FIRST()的每个终结符a,把A 加入MA,a(3)如果在FIRST()中,对FOLLOW(A)的每个终结符b(包括$),把A 加入MA,b(4)M中其它没有定义的条目都是error,3.3 自上而下分析,多重定义的条目,3.3 自上而下分析,消去多重定义,3.3 自上而下分析,3.3.6 预测分析的错误恢复1、先对编译器的错误处理做一个概述 词法错误,如标识符、关键字或算符的拼写错 语法错误,如算术表达式的括号不配对 语义错误,如算符作用于不相容的运算对象 逻辑错误,如无穷的递归调用,3.3 自上而下分析,2、分析器对错误处理的基本目标清楚而准确地报告错误的出现,并尽量少出现伪错误迅速地从每个错误中恢复过来,以便诊断后面的错误它不应该使正确程序的处理速度降低太多,3.3 自上而下分析,3、非递归预测分析在什么场合下发现错误栈顶的终结符和下一个输入符号不匹配,3.3 自上而下分析,3、非递归预测分析在什么场合下发现错误栈顶是非终结符A,输入符号是a,而MA,a是空白,3.3 自上而下分析,4、非递归预测分析:采用紧急方式的错误恢复发现错误时,分析器每次抛弃一个输入记号,直到输入记号属于某个指定的同步记号集合为止5、同步词法分析器当前提供的记号流能构成的语法构造,正是语法分析器所期望的,3.3 自上而下分析,6、同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合,3.3 自上而下分析,6、同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合if expr then stmt(then是expr的一个同步记号),3.3 自上而下分析,6、同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合把高层构造的开始符号加到低层构造的同步记号集合中,3.3 自上而下分析,6、同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合把高层构造的开始符号加到低层构造的同步记号集合中a=expr;if(语句的开始符号作为表达式的同步记号,以免表达式出错又遗漏分号时忽略if语句等一大段程序),3.3 自上而下分析,6、同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合把高层构造的开始符号加到低层构造的同步记号集合中把FIRST(A)的终结符加入A的同步记号集合a=expr;,if(语句的开始符号作为语句的同步符号,以免多出一个逗号时会把if语句忽略了),3.3 自上而下分析,6、同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合把高层构造的开始符号加到低层构造的同步记号集合中把FIRST(A)的终结符加入A的同步记号集合如果非终结符可以产生空串,若出错时栈顶是这样的非终结符,则可以使用推出空串的产生式,3.3 自上而下分析,例栈顶为T,面临id时出错,3.3 自上而下分析,T 可以产生空串,报错并用T,3.3 自上而下分析,同步记号集合的选择把FOLLOW(A)的所有终结符放入非终结符A的同步记号集合把高层结构的开始符号加到低层结构的同步记号集合中把FIRST(A)的终结符加入A的同步记号集合如果非终结符可以产生空串,若出错时栈顶是这样的非终结符,则可以使用推出空串的产生式如果终结符在栈顶而不能匹配,弹出此终结符,3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB d,3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcde(读入ab),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcde(归约),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcde(再读入bc),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcdeaAde(归约),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcdeaAde(再读入d),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcdeaAdeaABe(归约),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcdeaAdeaABe(再读入e),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcdeaAdeaABeS(归约),3.4 自下而上分析,3.4.1 归约例S aABe A Abc|bB dabbcdeaAbcdeaAdeaABeS S rm aABe rm aAde rm aAbcde rm abbcde,3.4 自下而上分析,3.4.2 句柄句型的句柄是和某产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步S aABe A Abc|bB dS rm aABe rm aAde rm aAbcde rm abbcde句柄的右边仅含终结符如果文法二义,那么句柄可能不唯一,3.4 自下而上分析,例句柄不唯一E E+E|E E|(E)|id,3.4 自下而上分析,例句柄不唯一E E+E|E E|(E)|idE rm E E rm E E+E rm E E+id3 rm E id2+id3 rm id1 id2+id3,3.4 自下而上分析,例句柄不唯一E E+E|E E|(E)|idE rm E E E rm E+E rm E E+Erm E+id3 rm E E+id3rm E E+id3 rm E id2+id3 rm E id2+id3 rm id1 id2+id3 rm id1 id2+id3 在句型E E+id3中,句柄不唯一,3.4 自下而上分析,3.4.3 用栈实现移进归约分析先通过移进归约分析器在分析输入串id1 id2+id3时的动作序列来了解移进归约分析的工作方式,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,3.4 自下而上分析,要想很好地使用移进归约方式,尚需解决一些问题如何决策选择移进还是归约进行归约时,确定右句型中将要归约的子串进行归约时,如何确定选择哪一个产生式,3.4 自下而上分析,3.4.4 移进归约分析的冲突 1、移进归约冲突例stmt if expr then stmt|if expr then stmt else stmt|other如果移进归约分析器处于格局栈输入 if expr then stmtelse$,3.4 自下而上分析,2、归约归约冲突stmt id(parameter_list)|expr=exprparameter_list parameter_list,parameter|parameterparameter idexpr id(expr_list)|idexpr_list expr_list,expr|expr由A(I,J)开始的语句栈输入 id(id,id),归约成expr还是parameter?,3.4 自下而上分析,2、归约归约冲突stmt id(parameter_list)|expr=exprparameter_list parameter_list,parameter|parameterparameter idexpr id(expr_list)|idexpr_list expr_list,expr|expr由A(I,J)开始的语句(词法分析查符号表,区分第一个id)栈输入 procid(id,id)需要修改上面的文法,3.5 LR分析器,本节介绍LR(k)分析技术特点适用于一大类上下文无关文法效率高主要介绍构造LR分析表的三种技术简单的LR方法(简称SLR)规范的LR方法向前看的LR方法(简称LALR),3.5 LR分析器,3.5.1 LR分析算法,3.5 LR分析器,例E E+T|E T T T F|T E F(E)|F id,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5 LR分析器,3.5.2 LR文法和LR分析方法的特点1、概念活前缀:右句型的前缀,该前缀不超过最右句柄的右端S*rm A w rm w 的任何前缀(包括和 本身)都是活前缀,3.5 LR分析器,3.5.2 LR文法和LR分析方法的特点1、概念活前缀:右句型的前缀,该前缀不超过最右句柄的右端2、定义LR文法:我们能为之构造出所有条目都唯一的LR分析表,3.5 LR分析器,3、LR分析方法的特点栈中的文法符号总是形成一个活前缀,3.5 LR分析器,3.5 LR分析器,3、LR分析方法的特点栈中的文法符号总是形成一个活前缀分析表的转移函数本质上是识别活前缀的DFA,3.5 LR分析器,例E E+T|E T 下表绿色部分构成 T T F|T E识别活前缀DFA的 F(E)|F id状态转换表,3.5 LR分析器,3、LR分析方法的特点栈中的文法符号总是形成一个活前缀分析表的转移函数本质上是识别活前缀的DFA栈顶的状态符号包含了确定句柄所需要的一切信息,3.5 LR分析器,3.5 LR分析器,3、LR分析方法的特点栈中的文法符号总是形成一个活前缀分析表的转移函数本质上是识别活前缀的DFA栈顶的状态符号包含了确定句柄所需要的一切信息是已知的最一般的无回溯的移进归约方法能分析的文法类是预测分析法能分析的文法类的真超集能及时发现语法错误手工构造分析表的工作量太大,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较在下面的推导中,最后一步用的是A lS rm rm A b w rm l b w,LL(1)决定用该产生式的位置,LR(1)决定用该产生式的位置,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,4、LR分析方法和LL分析方法的比较,3.5 LR分析器,3.5.3 构造SLR分析表术语:LR(0)项目(简称项目)在右部的某个地方加点的产生式,3.5 LR分析器,3.5.3 构造SLR分析表术语:LR(0)项目(简称项目)在右部的某个地方加点的产生式加点的目的是用来表示分析过程中的状态,3.5 LR分析器,3.5.3 构造SLR分析表术语:LR(0)项目(简称项目)在右部的某个地方加点的产生式加点的目的是用来表示分析过程中的状态,3.5 LR分析器,3.5.3 构造SLR分析表术语:LR(0)项目(简称项目)在右部的某个地方加点的产生式加点的目的是用来表示分析过程中的状态,3.5 LR分析器,3.5.3 构造SLR分析表术语:LR(0)项目(简称项目)在右部的某个地方加点的产生式加点的目的是用来表示分析过程中的状态,3.5 LR分析器,3.5.3 构造SLR分析表术语:LR(0)项目(简称项目)在右部的某个地方加点的产生式加点的目的是用来表示分析过程中的状态例AXYZ对应有四个项目A XYZA XYZA XYZA XYZ例A只有一个项目和它对应A,3.5 LR分析器,构造SLR分析表的两大步骤1、从文法构造识别活前缀的DFA2、从上述DFA构造分析表,3.5 LR分析器,1、从文法构造识别活前缀的DFA1)拓广文法E E+T|TT T F|F F(E)|id,3.5 LR分析器,1、从文法构造识别活前缀的DFA1)拓广文法E E E E+T|TT T F|F F(E)|id,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:E E,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:E EE E+T E T,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:E EE E+T E TT T F T F,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:E EE E+T E TT T FT FF(E)F id,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:E E(核心项目)E E+T E T(非核心项目,T T F 通过对核心项目求闭包T F 而获得)F(E)F id,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:I1:E EE E E E+T E E+T E TT T F T FF(E)F id,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:I1:E EE E E E+T E E+T E TT T F I1:=goto(I0,E)T FF(E)F id,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:I1:E EE E E E+T E E+T E TT T F I2:T FE T F(E)T T F F id,3.5 LR分析器,1、从文法构造识别活前缀的DFA2)构造LR(0)项目集规范族I0:I1:E EE E E E+T E E+T E TT T F I2:T FE T F(E)T T F F id I3:T F,3.5 LR分析器,I0:I4:E EF(E)E E+T E TT T FT FF(E)F id,3.5 LR分析器,I0:I4:E EF(E)E E+T E E+T E TE TT T FT T FT FT FF(E)F(E)F idF id,3.5 LR分析器,I0:I4:E EF(E)E E+T E E+T E TE TT T FT T FT FT FF(E)F(E)F idF id I5:F id,3.5 LR分析器,3.5 LR分析器,I1:E E E E+T,3.5 LR分析器,I1:E E E E+TI6:EE+TT T F T F F(E)F id,3.5 LR分析器,I1:I2:E EET E E+TTTF I6:EE+TT T F T F F(E)F id,3.5 LR分析器,I1:I2:E EET E E+TTTF I6:I7:EE+TTTF T T F F(E)T F F id F(E)F id,3.5 LR分析器,I3:T F 无状态转换,3.5 LR分析器,I4:F(E)E E+TE TT T F T FF(E)F id,3.5 LR分析器,I4:I8:F(E)F(E)E E+TE E+T E TT T F T FF(E)F id,3.5 LR分析器,I4:I8:F(E)F(E)E E+TE E+T E TT T F I2:T FETF(E)TTF F id,3.5 LR分析器,I4:I8:F(E)F(E)E E+TE E+T E TT T F I2:T FETF(E)TTF F id I3:TF,3.5 LR分析器,I4:I8:F(E)F(E)E E+TE E+T E TT T F I2:T FETF(E)TTF F id I3:TF I4:F(E).,3.5 LR分析器,I4:I8:F(E)F(E)E E+TE E+T E TT T F I2:T FETF(E)TTF F id I3:TF I4:I5:F(E)F id.,3.5 LR分析器,I5:F id 无状态转换,3.5 LR分析器,3.5 LR分析器,E E E+T E+T F E+T id E+T F id,把所有状态都作为接受状态这是一个DFA,E+T F 的所有前缀都可接受,3.5 LR分析器,I0:E EE E+TE TT T FT FF(E)F id,也可以构造一个识别活前缀的NFA N,3.5 LR分析器,I0:E E E EE E E E+T E T E E+T E TT T FT F T T F T FF(E)F id F(E)F id,E,也可以构造一个识别活前缀的NFA N 每个项目一个状态,3.5 LR分析器,从文法构造的识别活前缀的DFA的一些特点概念:有效项目如果S*rm Aw rm 12w,那么就说项目A12对活前缀1是有效的(1)一个项目可能对好几个活前缀都是有效的 E E+T对 和(这两个活前缀都有效E E E+T(,1都为空)E E(E)(E+T)(=“(”,1为空)该DFA读过 和(后到达不同的状态,那么项目E E+T就出现在对应的不同项目集中,3.5 LR分析器,从文法构造的识别活前缀的DFA的一些特点概念:有效项目如果S*rm Aw rm 12w,那么就说项目A12对活前缀1是有效的(1)一个项目可能对好几个活前缀都是有效的从项目A12对活前缀1有效这个事实可以知道如果2,应该移进如果2=,应该用产生式A1归约,3.5 LR分析器,从文法构造的识别活前缀的DFA的一些特点概念:有效项目如果S*rm Aw rm 12w,那么就说项目A12对活前缀1是有效的(1)一个项目可能对好几个活前缀都是有效的(2)一个活前缀可能有多个有效项目一个活前缀的有效项目集就是从这个DFA的初态出发,沿着标记为的路径到达的那个项目集(状态),3.5 LR分析器,例串E+T 是活前缀,读完它后,DFA处于状态I7I7:TT F,F(E),F id E E E E E E E+T E+T E+T E+T F E+T F E+T F E+T id E+T(E)E+T id E+T F id,3.5 LR分析器,构造SLR分析表的两大步骤1、从文法构造识别活前缀的DFA2、从上述DFA构造分析表,3.5 LR分析器,2、从DFA构造SLR分析表状态i从Ii构造,它的action函数如下确定:如果Aa在Ii中,并且goto(Ii,a)=Ij,那么置actioni,a为sj如果A在Ii中,那么对FOLLOW(A)中的所有a,置actioni,a为rj,j是产生式 A的编号如果SS在Ii中,那么置action i,$为接受acc如果出现动作冲突,那么该文法就不是SLR(1)的,3.5 LR分析器,2、从DFA构造SLR分析表状态i从Ii构造,它的action函数如下确定:.使用下面规则构造状态i的goto函数:对所有的非终结符A,如果goto(Ii,A)=Ij,那么gotoi,A=j,3.5 LR分析器,2、从DFA构造SLR分析表状态i从Ii构造,它的action函数如下确定:.使用下面规则构造状态i的goto函数:.不能由上面两步定义的条目都置为error分析器的初始状态是包含SS的项目集对应的状态,3.5 LR分析器,例 I2:E TT T F因为FOLLOW(E)=$,+,),所以action2,$=action2,+=action2,)=r2action2,=s7,3.5 LR分析器,例SLR(1)文法的描述能力有限,S V=ES E V EV id E V,I0:S S S V=ES E V EV id E V,I2:S V=EE V,V,第一项目使得action2,=s6 第二项目使得action2,=为按EV归约,因为=是E的一个后继符,=是E的一个后继符:S$V=E$E=E$,3.5 LR分析器,例SLR(1)文法的描述能力有限,S V=ES E V EV id E V,I0:S S S V=ES E V EV id E V,I2:S V=EE V,V,第一项目使得action2,=s6 第二项目使得action2,=为按EV归约,因为=是E的一个后继符,在所关注场合E的后继是$:S$V=E$E=E$S$E$V$,3.5 LR分析器,3.5.4 构造规范的LR分析表LR(1)项目:重新定义项目,让它带上搜索符,成为如下形式A,aLR(1)项目A,a对活前缀有效:如果存在着推导S*rm Aw rm w,其中:=;a是

    注意事项

    本文(编译原理语法分析3.ppt)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开