编译原理学习.pptx
《编译原理学习.pptx》由会员分享,可在线阅读,更多相关《编译原理学习.pptx(109页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上下文无关文法的定义:一个上下文无关文法G G是一个四元式 G=(VG=(VT T,V VN N,S S,P)P),其中V VT T:终结符集合(非空)V VN N:非终结符集合(非空),且V VT T V VN N=S S:文法的开始符号,S S V VN NP P:产生式集合(有限),每个产生式形式为P P,P P V VN N,(V VT T V VN N)*开始符S S至少必须在某个产生式的左部出现一次。第1页/共109页例,定义只含+,*的算术表达式的文法 G=,其中,P由下列产生式组成:E iE E+EE E*EE (E)第2页/共109页定义:称 A 直接推出,即 A 仅当A 是
2、一个产生式,且,(VT VN)*。如果 1 2 n,则我们称这个序列是从 1到 n的一个推导。若存在一个从 1到 n的推导,则称 1可以推导出 n。例:对文法(1)E (E)(E+E)(i+E)(i+i)第3页/共109页通常,用通常,用 表示:从表示:从 1 1出发,经过一步或若出发,经过一步或若干步,可以推出干步,可以推出 n n。用 表示:从 1 1出发,经过0 0步或若干步,可以推出 n n。所以 :即 或q定义:假定G G是一个文法,S S 是它的开始符号。如果 ,则 称是一个句型。仅含终结符号的句型是一个句子。文法G G所产生的句子的全体是一个语言,将它记为 L(G)L(G)。第4
3、页/共109页4.1 语法分析器的功能语法分析的任务是分析一个文法的句子结构。语法分析器的功能:按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序)。第5页/共109页源程序单词符号取下一单词.语法分析树词法分析器语法分析器符号表编译程序后续部分第6页/共109页语法分析的方法:自下而上分析法(Bottom-up)(Bottom-up)基本思想:从输入串开始,逐步进行“归约归约”,直到文法的开始符号。即从树末端开始,构造语法树。所谓归约,是指根据文法的产生式规则,把产生式的右部替换成左部符号。算符优先分析法:按照算符的优先关系和结合性质进行语法分析。适合分析表达式。LR
4、LR分析法:规范归约第7页/共109页G(E):E i|E+E|E-E|E*E|E/E|(E)i*i+i E*i+i E*E+i E+i E+E Ei+*EiiEEEE第8页/共109页语法分析的方法:自下而上分析法(Bottom-up)(Bottom-up)自上而下分析法(Top-down)(Top-down)基本思想:它从文法的开始符号出发,反复使用各种产生式,寻找 匹配 的推导推导。递归下降分析法:对每一语法变量(非终结符)构造一个相应的子程序,每个子程序识别一定的语法单位,通过子程序间的信息反馈和联合作用实现对输入串的识别。预测分析程序F优点:直观、简单和宜于手工实现。第9页/共109
5、页4.2 自上而下分析面临的问题自上而下就是从文法的开始符号出发,向下推导推导,推出句子。带“回溯”的不带回溯的递归子程序(递归下降)分析方法。自上而下分析的主旨:对任何输入串,试图用一切可能的办法,从文法开始符号(根结点)出发,自上而下地为输入串建立一棵语法树语法树。或者说,为输入串寻找一个最左推导。第10页/共109页例假定有文法G(S):(1)SxAy (2)A*|*分析输入串x*y(记为)。Sx*yIPSx*yIPAxySx*yIPAxySx*yIPAxy*Sx*yIPAxy*Sx*yIPAxy*Sx*yIPAxy*第11页/共109页当某个非终结符有多个产生式候选时,可能带来如下问题
6、:1.1.分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的。出错时,不得不“回溯”。2.2.文法左递归问题。一个文法是含有左递归的,如果存在非终结符P P含有左递归的文法将使自上而下的分析陷入无限循环。第12页/共109页4.3 LL(1)分析法构造不带回溯的自上而下分析算法要消除文法的左递归性克服回溯第13页/共109页左递归的消除直接消除见诸于产生式中的左递归:假定关于非终结符P的规则为PP|其中 不以P开头。我们可以把P的规则等价地改写为如下的非直接左递归形式:P P P P|左递归变右递归第14页/共109页一般而言,假定P关于的全部产生式是PP 1|P 2|P
7、m|1|2|n其中,每个 都不等于,每个 都不以P开头 那么,消除P的直接左递归性就是把这些规则改写成:P 1P|2P|nP P 1P|2P|mP|左递归变右递归第15页/共109页例 文法G(E):EET|TTT*F|FF(E)|i经消去直接左递归后变成:ETE E+TE|TFT T*FT|F(E)|i(4.2)PPP P 1 1|P|P 2 2|P|P mm|1 1|2 2|n nPP 1 1P P|2 2P P|n nP P P P 1 1P P|2 2P P|mmP P|第16页/共109页例如文法G(S):SQc|cQRb|bRSa|a (4.3)虽没有直接左递归,但S、Q、R都是左
8、递归的SQcRbcSabc一个文法消除左递归的条件:F不含以 为右部的产生式F不含回路。第17页/共109页消除左递归的算法:1.把文法G的所有非终结符按任一种顺序排列成P1,P2,Pn;按此顺序执行;2.FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如PiPj 的规则改写成 Pi 1|2|k ;(其中Pj 1|2|k是关于Pj的所有规则)消除关于Pi规则的直接左递归性 END3.化简由2所得的文法。去除那些从开始符号出发永远无法到达的非终结符的产生规则。第18页/共109页例 考虑文法G(S)SQc|cQRb|bRSa|a令它的非终结符的排序为R、Q
9、、S。对于R,不存在直接左递归。把R代入到Q的有关候选后,把Q的规则变为 QSab|ab|b第19页/共109页例 考虑文法G(S)SQc|cQRb|bRSa|a令它的非终结符的排序为R、Q、S。Q的规则变为 QSab|ab|b现在的Q不含直接左递归,把它代入到S的有关候选后,S变成SSabc|abc|bc|c第20页/共109页例 考虑文法G(S)SQc|cQRb|bRSa|aS变成SSabc|abc|bc|c消除S的直接左递归后:SabcS|bcS|cS S abcS|QSab|ab|bRSa|a第21页/共109页例 考虑文法G(S)SQc|cQRb|bRSa|a消除S的直接左递归后:S
10、abcS|bcS|cS S abcS|QSab|ab|bRSa|a关于Q和R的规则已是多余的,化简为:SabcS|bcS|cS S abcS|(4.4)第22页/共109页注意,由于对非终结符排序的不同,最后所得的文法在形式上可能不一样。但不难证明,它们都是等价的。例如,若对文法(4.3)的非终结符排序选为S、Q、R,那么,最后所得的无左递归文法是:SQc|cQRb|bRbcaR|caR|a R (4.5)R bca R|文法(4.4)和(4.5)的等价性是显然的。第23页/共109页消除回溯、提左因子为了消除回溯就必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符
11、号准确地指派它的一个候选去执行任务,并且此候选的工作结果应是确信无疑的。A 1|2|nSa.IPA.第24页/共109页令G是一个不含左递归的文法,对G的所有非终结符的每个候选 定义它的终结首符集FIRST()为:特别是,若 ,则规定FIRST()。如果非终结符A的所有候选首符集两两不相交,即A的任何两个不同候选 i和 jFIRST(i)FIRST(j)当要求A匹配输入串时,A就能根据它所面临的第一个输入符号a,准确地指派某一个候选前去执行任务。这个候选就是那个终结首符集含a的。第25页/共109页提取公共左因子:假定关于A的规则是 A 1|2|n|1|2|m(其中,每个 不以 开头)那么,可
12、以把这些规则改写成A A|1|2|mA 1|2|n经过反复提取左因子,就能够把每个非终结符(包括新引进者)的所有候选首符集变成为两两不相交。第26页/共109页 ETE E+TE|TFT T*FT|F(E)|i i +i分析条件第27页/共109页i +i IPEnG(E):ETE E+TE|TFT T*FT|F(E)|i第28页/共109页i +i IPETEnG(E):ETE E+TE|TFT T*FT|F(E)|i第29页/共109页i +i IPETEFTnG(E):ETE E+TE|TFT T*FT|F(E)|i第30页/共109页i +i IPETEFTinG(E):ETE E+T
13、E|TFT T*FT|F(E)|i第31页/共109页i +i IPETEFTinG(E):ETE E+TE|TFT T*FT|F(E)|i第32页/共109页i +i IPETEFTi nG(E):ETE E+TE|TFT T*FT|F(E)|i第33页/共109页i +i IPETEFTi+TEnG(E):ETE E+TE|TFT T*FT|F(E)|i第34页/共109页i +i IPETEFTi+TEnG(E):ETE E+TE|TFT T*FT|F(E)|i第35页/共109页i +i IPETEFTi+TEFTnG(E):ETE E+TE|TFT T*FT|F(E)|i第36页/共
14、109页i +i IPETEFTi+TEFTinG(E):ETE E+TE|TFT T*FT|F(E)|i第37页/共109页i +i IPETEFTi+TEFTinG(E):ETE E+TE|TFT T*FT|F(E)|i第38页/共109页i +i IPETEFTi+TEFTi nG(E):ETE E+TE|TFT T*FT|F(E)|i第39页/共109页i +i IPETEFTi+TEFTi nG(E):ETE E+TE|TFT T*FT|F(E)|iS T+第40页/共109页假定S是文法G的开始符号,对于G的任何非终结符A,我们定义特别是,若 ,则规定 FOLLOW(A)分析条件第
15、41页/共109页n构造不带回溯的自上而下分析的文法条件1.文法不含左递归,2.对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,若A 1|2|n 则 FIRST(i)FIRST(j)(i j)3.对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIRST(i)FOLLOW(A)=i=1,2,.,n如果一个文法G满足以上条件,则称该文法G为LL(1)LL(1)文法文法。第42页/共109页对于一个满足上述条件的文法,可以对其输入串进行有效的无回溯的自上而下分析。假设要用非终结符A进行匹配,面临的输入符号为a,A的所有产生式为A 1|2|n1.若a FIRST(i),则指
16、派 i执行匹配任务;2.若a不属于任何一个候选首符集,则:(1)若 属于某个FIRST(i)且 a FOLLOW(A),则让A与 自动匹配。(2)否则,a的出现是一种语法错误。第43页/共109页回顾:LL(1)分析法构造不带回溯的自上而下分析算法要消除文法的左递归性克服回溯第44页/共109页一般而言,假定P关于的全部产生式是PP 1|P 2|P m|1|2|n其中,每个 都不等于,每个 都不以P开头 那么,消除P的直接左递归性就是把这些规则改写成:P 1P|2P|nP P 1P|2P|mP|第45页/共109页消除左递归的算法:1.把文法G的所有非终结符按任一种顺序排列成P1,P2,Pn;
17、按此顺序执行;2.FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如PiPj 的规则改写成 Pi 1|2|k ;(其中Pj 1|2|k是关于Pj的所有规则)消除关于Pi规则的直接左递归性 END3.化简由2所得的文法。去除那些从开始符号出发永远无法到达的非终结符的产生规则。第46页/共109页回顾:LL(1)分析法构造不带回溯的自上而下分析算法要消除文法的左递归性克服回溯第47页/共109页消除回溯、提左因子为了消除回溯就必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确地指派它的一个候选去执行任务,并且此候选的工作结果
18、应是确信无疑的。A 1|2|nSa.IPA.第48页/共109页令G是一个不含左递归的文法,对G的所有非终结符的每个候选 定义它的终结首符集FIRST()为:特别是,若 ,则规定FIRST()。如果非终结符A的所有候选首符集两两不相交,即A的任何两个不同候选 i和 jFIRST(i)FIRST(j)当要求A匹配输入串时,A就能根据它所面临的第一个输入符号a,准确地指派某一个候选前去执行任务。这个候选就是那个终结首符集含a的。第49页/共109页提取公共左因子:假定关于A的规则是 A 1|2|n|1|2|m(其中,每个 不以 开头)那么,可以把这些规则改写成A A|1|2|mA 1|2|n经过反
19、复提取左因子,就能够把每个非终结符(包括新引进者)的所有候选首符集变成为两两不相交。第50页/共109页i +i IPETEFTi+TEn ETE E+TE|TFT T*FT|F(E)|i第51页/共109页假定S是文法G的开始符号,对于G的任何非终结符A,我们定义特别是,若 ,则规定 FOLLOW(A)FOLLOW定义第52页/共109页n构造不带回溯的自上而下分析的文法条件1.文法不含左递归,2.对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,若A 1|2|n 则 FIRST(i)FIRST(j)(i j)3.对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIR
20、ST(i)FOLLOW(A)=i=1,2,.,n如果一个文法G满足以上条件,则称该文法G为LL(1)LL(1)文法文法。第53页/共109页对于一个满足上述条件的文法,可以对其输入串进行有效的无回溯的自上而下分析。假设要用非终结符A进行匹配,面临的输入符号为a,A的所有产生式为A 1|2|n1.若a FIRST(i),则指派 i执行匹配任务;2.若a不属于任何一个候选首符集,则:(1)若 属于某个FIRST(i)且 a FOLLOW(A),则让A与 自动匹配。(2)否则,a的出现是一种语法错误。第54页/共109页构造FIRST()第55页/共109页对每一文法符号X VTVN构造FIRST(
21、X)连续使用下面的规则,直至每个集合FIRST不再增大为止:1.若X VT,则FIRST(X)X。2.若X VN,且有产生式Xa,则把a加入到FIRST(X)中;若X 也是一条产生式,则把 也加到FIRST(X)中。第56页/共109页3.l若XY是一个产生式且Y VN,则把FIRST(Y)中的所有非-元素都加到FIRST(X)中;l若XY1Y2Yk是一个产生式,Y1,Yi-1都是非终结符,而且,对于任何j,1 j i-1,FIRST(Yj)都含有(即Y1Yi-1),则把FIRST(Yi)中的所有非-元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj)均含有,j1,2,k,则把 加
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 学习
限制150内