第四章语法分析自上而下优秀课件.ppt
《第四章语法分析自上而下优秀课件.ppt》由会员分享,可在线阅读,更多相关《第四章语法分析自上而下优秀课件.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章语法分析自上而下第1页,本讲稿共60页 一、一、语法分析的任务与分类语法分析的任务与分类l 语法分析的任务:语法分析的任务:对任一给定对任一给定 w Vw VT T*,判断,判断 w Lw L(G G)l 语法分析器:是一个程序,它按照语法分析器:是一个程序,它按照P P,做识别,做识别ww的工作的工作词法分析器词法分析器语法分析器语法分析器编译程序后续部分编译程序后续部分符号表符号表源程序单词符号取下一个单词符号语法分析图图4.1 4.1 语法分析器在编译程序中的地位语法分析器在编译程序中的地位第2页,本讲稿共60页二、自上而下分析面临的问题二、自上而下分析面临的问题1 1、主旨:主旨
2、:从文法开始符号出发,从文法开始符号出发,自上而下自上而下的为输入的为输入串建立一棵语法树串建立一棵语法树l 语法分析的分类:自下而上 自上而下l 例例4.1 4.1 文法文法G1G1:S cAdS cAd A ab|a A ab|a 输入串:输入串:w=cadw=cad,为它建立语法树,为它建立语法树第3页,本讲稿共60页ScAdabaS cAdS cAdA abA abA aA a输入串输入串w:w:文法文法G:G:IPIP分析过程:1 1)ww输入串;输入串;IP IP c c S S扩充;扩充;c a dc a d2 2)=c A d=c A d;与与 IP IP c c匹配;匹配;3
3、 3)IP IP a aA A扩展,第一式扩展,第一式ab,ab,IP IP a a与与abab匹配;匹配;IP IP d d,但但d d与与b b不匹配不匹配;4 4)报告失败,撤销)报告失败,撤销A A的子树,的子树,回到回到A;A;指针回退到指针回退到IP IP a a;A A还有替换式未试过,而又可能还有替换式未试过,而又可能匹配;匹配;语法树的形成语法树的形成第4页,本讲稿共60页l上述分析方法的实现:上述分析方法的实现:每一非终结符对应一个递归子程序,在只生成每一非终结符对应一个递归子程序,在只生成两个串的文法,过程无须递归,而对生成无数个串的文两个串的文法,过程无须递归,而对生成
4、无数个串的文法,递归是不可避免的;法,递归是不可避免的;递归子程序:是一个布尔过程,一旦发现它的递归子程序:是一个布尔过程,一旦发现它的某个候选式与输入串匹配,它就按此式扩充语法树,某个候选式与输入串匹配,它就按此式扩充语法树,并返回并返回truetrue,指针移过已匹配子串。否则,指针移过已匹配子串。否则,返回返回falsefalse,保持原来的语法树和指针不变。,保持原来的语法树和指针不变。第5页,本讲稿共60页l程序实现:程序实现:l使用记号:使用记号:input_symbolinput_symbol:当前符号内容:当前符号内容input_pointerinput_pointer:输入字
5、符指针:输入字符指针l使用过程:使用过程:ADVANCE()ADVANCE():把:把input_pointerinput_pointer移到下一输入符号位置,移到下一输入符号位置,置置input_symbolinput_symbol是当前符号内容;是当前符号内容;使用两个过程:使用两个过程:S()S()和和A()A(),它们送回,它们送回true or falsetrue or false,决定于它们是否在输入串中找到相应的非终结符所构成的串。决定于它们是否在输入串中找到相应的非终结符所构成的串。第6页,本讲稿共60页procedure S();procedure S();beginbegi
6、n if input_symbol=cthen if input_symbol=cthen begin beginADVANCE();ADVANCE();if A()thenif A()then if inputSymbol=d if inputSymbol=d then thenbeginbegin ADVANCE();ADVANCE();return true return trueendend end;end;return false;return false;end;end;procedure A();procedure A();beginbegin isave:=input_poin
7、ter;isave:=input_pointer;if input_symbol=a then if input_symbol=a then begin beginADVANCE();ADVANCE();if inputSymbol=b thenif inputSymbol=b then begin begin ADVANCE();return true;ADVANCE();return true;end end end end/*failure to find ab*/*failure to find ab*/input_pointer:=isave;input_pointer:=isave
8、;if inputSymbol=a then if inputSymbol=a thenbeginbegin ADVANCE();return true;ADVANCE();return true;endend else return false;else return false;end;end;第7页,本讲稿共60页2 2、困难和问题、困难和问题l文法的左递归文法的左递归l回溯回溯l用替换符的顺序会影响所接受的语言用替换符的顺序会影响所接受的语言 如:如:A ab|a A ab|a 改为改为 A a|ab A a|ab l难以报告出错的确切位置难以报告出错的确切位置l穷举试探法穷举试探法低
9、效的分析方法低效的分析方法第8页,本讲稿共60页三、自上而下分析的问题解决三、自上而下分析的问题解决消除文法的左递归克服回溯问题第9页,本讲稿共60页1 1、区分三种类型的左递归、区分三种类型的左递归-直接左递归直接左递归 即形如:即形如:NNNN-间接左递归间接左递归 即形如:即形如:NANA AB AB BN BN-潜在左递归潜在左递归即形如:即形如:NNNN 而而 第10页,本讲稿共60页2 2、直接左递归的消除、直接左递归的消除候选式:候选式:AAAA|A A A AA A A|消除方法:消除方法:若:若:A AA A|,其中,其中不以不以A A开头开头则修改规则为:则修改规则为:A
10、A AA A A A|A|第11页,本讲稿共60页消去直接左递归后:消去直接左递归后:E TEE TE E+TE|E+TE|T FTT FT T*FT|T*FT|F F (E E)|i|i例例4.2 4.2 文法:文法:E E+T|TE E+T|TT T*F|FT T*F|FF F (E E)|i|i消除方法:消除方法:若:若:A AA A|,(不以不以P P开头开头)则修改规则为:则修改规则为:A A AA A A A|A|第12页,本讲稿共60页3 3、间接和潜在左递归的消除、间接和潜在左递归的消除代入法代入法 将一个产生式规则右部的将一个产生式规则右部的中的非终结符中的非终结符NN替替换
11、为换为NN的候选式。如果的候选式。如果NN有有 n n个候选式,右边的个候选式,右边的重复重复n n次,而且每一次重复都有次,而且每一次重复都有NN的不同候选式来的不同候选式来代替代替NN。例例4.34.3 Na|Bc|Na|Bc|在在SpNqSpNq中的代入结果为中的代入结果为Spaq|pBcq|pqSpaq|pBcq|pq间接和潜在左递归通常通过代入能转换为直接左递归第13页,本讲稿共60页4 4、消除一个文法的一切左递归算法、消除一个文法的一切左递归算法l对文法G的所有非终结符进行排序l按上述顺序对每一个非终结符Pi依次执行:for(j=1;j i-1;j+)将Pj代入Pi的产生式(若可
12、代入的话);消除关于Pi的直接左递归;l化简上述所得文法。第14页,本讲稿共60页5 5、消除回溯、提左因子、消除回溯、提左因子l回溯原因回溯原因若若当前符号当前符号=a=a,对,对 A A 展开,而展开,而 A A 1 1|2 2|m m,那么,要知道哪一个那么,要知道哪一个i i是获得以是获得以a a开头的串的唯一替换式。开头的串的唯一替换式。即:选择哪一个即:选择哪一个i i,亦即通过查看第一个(当前)符号来发,亦即通过查看第一个(当前)符号来发现合适的替换式现合适的替换式i i。怎样选择怎样选择i i?以以a a为头的为头的i i如有多个如有多个i i以以a a为头的,这是文法的问题为
13、头的,这是文法的问题第15页,本讲稿共60页例如,有产生式:例如,有产生式:语句语句if if 条件条件 then then 语句语句 else else 语句语句|whilewhile 条件条件 do do 语句语句|beginbegin 语句表语句表 end end 若要寻找一个语句,那么关键字 if,while,begin就提示我们哪一个替换式是仅有可能成功的替换式。抽象地看问题:抽象地看问题:若要求不得回溯,文法若要求不得回溯,文法G G(当然(当然G G不含左递归)不含左递归)的必要条件是什么,也即对文法有什么要求?的必要条件是什么,也即对文法有什么要求?第16页,本讲稿共60页若由
14、若由i i a a,选该,选该必中,但若必中,但若j j a a,就会导致无法百发百中,解决办法是对文法本身提就会导致无法百发百中,解决办法是对文法本身提出要求:出要求:“不会出现以上情况不会出现以上情况”,把这些阐明清楚,把这些阐明清楚是用一个是用一个FIRST(FIRST()。l定义定义FIRST(FIRST():FIRST(FIRST()=a|)=a|a a,aV,aVT T 若若 ,规定,规定FFIRST(IRST()第17页,本讲稿共60页l定理定理若一个若一个 A AV VNN,就有许多,就有许多FIRST(FIRST(i i),如果,如果A A的的任何两个候选式任何两个候选式i
15、i和和j j,均有,均有FIRST(FIRST(i i)FIRST()FIRST(j j)=)=意味着,意味着,A A的每一候选式的每一候选式推导后所得的字符串推导后所得的字符串第一个第一个V VT T均不同。均不同。于是,对输入符号于是,对输入符号a a,如果,如果a aFIRST(FIRST(i i),则,则a nota notFIRSTFIRST(j j),(ji)(ji),因此,对,因此,对A A的展开无疑应选候选式的展开无疑应选候选式i i,才有可能命中。才有可能命中。第18页,本讲稿共60页l消除回溯目的:消除回溯目的:非终结符非终结符A A的所有侯选式的首符集两两不相交的所有侯选
16、式的首符集两两不相交l方法:提取公共左因子方法:提取公共左因子若若:A A 1 1|2 2|n n|1 1|2 2|mm (其中其中,每个每个不以不以开头开头)那么那么,可以把这些规则改写成可以把这些规则改写成 A A A A|1 1|2 2|mm A A1 1|2 2|n n第19页,本讲稿共60页四、递归下降分析程序构造四、递归下降分析程序构造在不含左递归和每个非终结符的所有候选式的终结首符集都两两不相交条件下,构造一个不带回溯的自上而下分析程序,该分析程序由一组递归过程组成,每个过程对应文法的一个非终结符。这样的一个分析程序称为递归下降分析器。第20页,本讲稿共60页 E TEE TE
17、E +TE|E +TE|T FT T FT T *FT|T *FT|F F (E E)|i|i每个非终结符所对应的递归子程序如下所示:每个非终结符所对应的递归子程序如下所示:1 1 例例4.44.4 文法文法 G G:第21页,本讲稿共60页PROCEDURE PROCEDURE E;E;BEGINBEGIN T;E T;EEND;END;PROCEDURE PROCEDURE T;T;BEGINBEGIN F;T F;TEND;END;PROCEDURE PROCEDURE E E;IF IF SYM=+THEN SYM=+THEN BEGINBEGIN ADVANCE;ADVANCE;T;
18、E T;EEND;END;E TEE TEE +TE|E +TE|T FTT FT第22页,本讲稿共60页PROCEDURE TPROCEDURE T;IF SYM=*THENIF SYM=*THENBEGINBEGIN ADVANCE;ADVANCE;F;T F;TEND;END;PROCEDURE F;PROCEDURE F;IF SYM=iTHEN ADVANCEIF SYM=iTHEN ADVANCEELSEELSE IF SYM=(THEN IF SYM=(THEN BEGIN BEGIN ADVANCE;ADVANCE;E;E;IF SYM=)THEN ADVANCE IF SYM
19、=)THEN ADVANCE ELSE ERROR ELSE ERROR END END ELSE ERROR;ELSE ERROR;面临输入:面临输入:i i1 1+i+i2 2*i*i3 3时的分析步骤如下:时的分析步骤如下:T*FT|T*FT|F F (E E)|i|i第23页,本讲稿共60页i i1 1+i+i2 2*i*i3 3 分析过程:分析过程:ETEFTi i1 1PROCEDURE PROCEDURE E;E;BEGINBEGIN T;E T;EEND;END;PROCEDURE PROCEDURE T;T;BEGINBEGIN F;T F;TEND;END;PROCEDUR
20、E F;PROCEDURE F;IF SYM=iTHEN ADVANCEIF SYM=iTHEN ADVANCEELSEELSE IF SYM=(THEN IF SYM=(THEN BEGIN BEGIN ADVANCE;ADVANCE;E;E;IF SYM=)THEN ADVANCE IF SYM=)THEN ADVANCE ELSE ERROR ELSE ERROR END END ELSE ERROR;ELSE ERROR;PROCEDURE TPROCEDURE T;IF SYM=*THENIF SYM=*THENBEGINBEGIN ADVANCE;ADVANCE;F;T F;TEN
21、D;END;第24页,本讲稿共60页i1+i2*i3 分析过程:ETEFT+ETFT*FTi1i i2 2i i3 3PROCEDURE PROCEDURE E E;IF IF SYM=+THEN SYM=+THEN BEGINBEGIN ADVANCE;ADVANCE;T;E T;EEND;END;PROCEDURE TPROCEDURE T;IF SYM=*THENIF SYM=*THENBEGINBEGIN ADVANCE;ADVANCE;F;T F;TEND;END;第25页,本讲稿共60页2 2、注意:、注意:有有,自动匹配,不会失败,自动匹配,不会失败无成功无成功/失败消息返回失败
22、消息返回出错位置不确切出错位置不确切第26页,本讲稿共60页五、预测分析程序五、预测分析程序问题:用递归子程序描写递归下降分析器,要求实现该编译系统的语言允许递归。改进:使用一张分析表和一个栈同样可实现递归下降分析,用这种方法实现的语法分析程序叫预测分析程序。第27页,本讲稿共60页 a a 总控程序预测分析表Mx x#输 出栈输入串1 1、预测分析程序的工作过程、预测分析程序的工作过程第28页,本讲稿共60页l预测分析程序有预测分析程序有四四部分部分求值X:=ABD条件控制WHILE ABD DO SIF ABD THEN S1 ELSE S21)一个)一个输入输入:含有要分析的串,右端有:
23、含有要分析的串,右端有#2)一个)一个栈栈:栈底是:栈底是#,栈内是一系列文法符号。,栈内是一系列文法符号。开始时,开始时,#和和S先进栈先进栈3)分析表分析表:二维数组:二维数组MA,a,其中,其中a VT;A VN4)输出输出:根据分析表内元素做规定的语义动作:根据分析表内元素做规定的语义动作第29页,本讲稿共60页l分析程序的动作分析程序的动作 程序测定栈顶有程序测定栈顶有X X和当前输入符和当前输入符a a,由(,由(X X,a a)决定程序动作,三种可能决定程序动作,三种可能:1 1)若)若X=a=#X=a=#,分析停止,宣告成功地完成,分析停止,宣告成功地完成分析;分析;2 2)若
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 语法分析 自上而下 优秀 课件
限制150内