陈火旺编译原理复习重点及复习思路总结笔记二

   /2005-05-08

 

第4章        语法分析-自上而下的分析:
说明:这一次的更新,确实有点慢了,距上次已经有了20天的时间,这段时间主要因为sodme所在的公司在进行搬迁事宜,所以心境和环境都不太安定,让大家久候了,以后我尽量在一到两周左右的时间里把这个贴子更新完毕,今天是10月12日,请大家监督,这个贴子最晚截止更新时间是10月26日。

大家在参阅编译原理的这个重点归纳贴子时,可能会感觉与数据结构规纳贴子风格不太一致,在编译的总结里,我较多地讲解了书上的一些我认为是较难理解的内容,而不仅仅是给出考点。因为从我接触的网友反映的情况看来,大家对编译还是比较头疼的,所以,我希望通过这样的规纳同时帮助大家从另外一个角度或以另外一种思维来看待编译原理课程。

当词法分析器对源程序进行了词法分析,获得了一个个独立的单词符号后,编译程序总控模块就会调用语法分析子程序对这些单词符号集进行语法分析,也就是:利用该文法的产生式来判断这些单词符号是否足以构成一个在语法上正确的程序。如果可以构成一个在语法上正确的程序,则接着作编译下面的工作,比如:语法制导翻译,中间代码生成、代码优化等工作;而如果不能构成一个在语法上正确的程序,则给出相应的错误提示并将错误信息记入对应的数据记录中。

语法分析的规则主要基于两种:自上而下分析和自下而上分析。这一章,主要讲解自上而下的分析方法。自上而下分析的大致思路是:根据产生式规则,从产生式的开始符号进行推导,一直推导到可以产生当前要判断的这个句子为止。如果推导了所有可能情况,但没有推出这样的句子,那么这个句子就是不符合该语言的语法规则的(产生式即定义了语言的语法规则)。

在陈火旺老师的编译教材上,详细描述了一种自上而下的分析方法:LL(1)分析法,陈老教材的这一章也是围绕这一点而展开的。下面,我们介绍一下本章的主要常考知识点及考查角度:
1.给定一文法,要求将其改造成可以进行自上而下分析的形式。这里面涉及到两方面的知识点:左递归的去除及公因子的提取。所谓的左递归是指产生式是形如:P->Pab...的形式,即:产生式右边的第一个字符就是该产生式左边的那个非终结符。当一个文法中有左递归的产生式时,是无法进行自上而下推导的,因为只要这个产生式被推导,就势必会使这种推导过程陷入一种递归循环无休止推导的情形。去除左递归的方法是比较简单的,其基本思路是将左递归通过转化变成与之等价的右递归。即将形如:P->Pa|b 形式的左递归变成如下形式:P->bP',P'->aP'|e(注:e表示空)。这一点只要多作练习,很快就会掌握。提取公因子的目的是为了避免推导过程中的回溯,也就是使每一次的向下推导是唯一的,而不是有多个选择,因为有多个选择的话就可能出现回溯。
2.给定一文法,要求判断其是否为LL(1)文法。判断一个文法是否为LL(1)文法主要有两种方法:一种是判断文法是否二义,如果二义,则文法必定不为LL(1)(注意:此命题的否合命题不真);二是根据陈老教材P73页:关于LL(1)文法成立的三个条件。显然,第一种判断方法效率是比较高的,但是,其只能判断文法“不为”LL(1)的,并不能判定文法“是”LL(1)的,要判断文法“是”LL(1)的,就得用第二种方法,但在考题中,如果要求你判断某文法是否为LL(1)的,则该文法多半不是LL(1)的,而且此点可以很容易地用二义性来证明,这是一种常考形式。
3.给定一文法,要求构造LL(1)分析表。LL(1)分析的重点和难点内容都在其分析表的构造上,后面要讲的LR分析也是,它的难点也在于其分析表的构造。构造LL(1)分析表是一个常考点,也是大分值题的可能出题点,对于普通学校而言,相比于LR分析,他们更喜欢考LL(1),因为LR要比LL(1)复杂得多,而名校则更喜欢考LR,当然,这只是针对于较普遍的情况作的总结,并不是一定成立的推论。LL(1)分析表构造前,需要先弄清FIRST集和FOLLOW集的构造方法,简单地说,FIRST集是用于求非终结符推出的产生式中的第一个终结符的,而FOLLOW集是用于求与该非终结符后紧邻的那个终结符的。FIRST集的构造方法见教材P78页,在构造的三个规则中,前两个规则都是比较容易理解的,第三个规则看上去就有点复杂了,我们简单地来看第三条规则,就是:当由X推出的产生式中前面若干个非终结符,其FIRST集均含有空时,就取这若干个非结符的后一个字符的FIRST集,当然,这“后一个字符”可能是终结符,也可能是非终结符,只要其FIRST集不为空就行;而当X推出的右边全是非终结符,且这些非终结符的FIRST集全含有空时,就把空加到FIRST(X)中。FOLLOW集的构造方法很简单,不作详细讲解了。LL(1)分析表的构造方法见教材P79页,构造规则主要有3条。说到这里,大家应该明确分析表中的各个单元到底代表什么含义,我作一下简单的介绍:分析表中的最顶一行,是产生式中所有的终结符;分析表中的最左一列,是产生式中所有的非终结符;而产生式中间的诸多单元格则可以存放该文法的产生式或特殊标志(比如成功和错误标志)。这样的二维表格构成的单元格的含义是:当左边的非终结符遇到最上一行中的某个终结符时应该选择哪个产生式进行向下的推导,这个产生式就是放在对应二维坐标处的产生式。
4.给定一文法,先要求求解其LL(1)分析表,然后要求给出针对于某一个句子的具体分析过程。这个考点的第二问主要就是考查考生对预测分析程序的工作过程的理解了,预测分析程序完全是按照分析表机械工作的,针对于考生而言,要明确何时出栈,何时入栈,以及如何入栈,这些细节信息都是要通过作题掌握的,只理解而不会熟练解答是没有用的。
5.给定一文法,要求给出其递归下降分析程序。递归下降分析的条件也是无左递归及不带回溯,其构造的过程比较简单,就是将每个非终结符处理成可以互相递归调用的过程体。详细过程参照P74到P75的例子,你可以试着写一下P76页教材上未列出的F过程的实现。

下一次,我们会详细讲解LR分析,敬请期待。如果网友对讲解有什么意见或建议,也欢迎跟贴指出,谢谢大家。

后续内容:
第5章        语法分析-自下而上的分析:
第6章        属性文法和语法制导翻译:
第7章        语义分析和中间代码生成:
第8章        符号表:
第9章        运行时存储空间组织:
第10章        优化:
第11章        目标代码生成:
第12章        并行编译基础:

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闂囧鏌ㄥ┑鍡欏妞ゅ繒濮风槐鎺楀焵椤掍胶绡€闁稿本顨嗛弬鈧梻浣虹帛钃辩憸鏉垮暣閸┾偓妞ゆ巻鍋撴い鏇ㄥ幘濡叉劙骞橀幇浣瑰兊闁哄鐗勯崝宀勫几閹达附鈷戦柛婵嗗閺嗘瑩鏌eΔ鈧€氫即宕洪埀顒併亜閹达絾纭剁紒鎰⒒閳ь剚顔栭崰鏇犲垝濞嗘挶鈧礁顫滈埀顒勫箖濞嗘挻鍤戦柛銊︾☉娴滈箖鏌涢…鎴濇灀闁衡偓娴犲鐓ユ繛鎴灻鈺伱归悩娆忔噽绾惧吋銇勯弴鐐村櫣闁诲骏濡囬埀顒侇問閸n噣宕戞繝鍥х畺闁冲搫鍟扮壕鍏间繆椤栫偞鏁遍悗姘偢濮婂宕掑▎鎴g獥闂佺ǹ顑呭Λ婵嗙暦閹存績妲堥柕蹇娾偓铏吅婵$偑鍊栭悧妤冪矙閹烘垟鏋嶉柣妯肩帛閻撴瑧绱撴担闈涚仼闁哄鍠栭弻锝夊箻鐠虹儤鐏堥梺鍝勭灱閸犳牕鐣疯ぐ鎺濇晩闁稿繐鍚嬮鍕攽閻愯尙鎽犵紒顔肩У缁旂喖宕卞☉妯煎姦濡炪倖甯掗崰姘缚閹邦厾绠鹃柛娆忣槺婢ь剟鏌¢崨鏉跨厫闁诡垱妫冩俊鎼佸Ψ瑜滈崬褰掓⒒娴e憡鍟炴繛璇х畵瀹曟粌顫濋鐔峰伎濠电姴锕ら悧濠囨偂濞戞﹩鐔嗛悹杞拌閸庡繑銇勯弴鐔虹煉闁哄矉绲鹃幆鏃堝閻橆偅鐏嗘繝娈垮枛閿曘倝鈥﹀畡鎵殾闁圭儤鍨熼弸搴ㄦ煙鐎电ǹ啸鐎规洘鐓″缁樼瑹閳ь剟鍩€椤掑倸浠滈柤娲诲灡閺呰埖瀵肩€涙ḿ鍘遍柣搴秵閸嬪棗煤閹绢喗鐓欑€规洖娲ら弸娑欍亜閵忥紕鈽夐柍钘夘槸閳诲酣骞囬鐓庘枏濠电姷鏁搁崑娑㈩敋椤撱垹鍌ㄧ憸鏃堝箖濞差亜惟闁冲搫鍊告禍妤呮⒑閸濆嫭鍌ㄩ柛銊︽そ閹繝鎮㈤梹鎰畾濡炪倖鐗楃换鍌炲触瑜版帗鐓曟繛鍡楄嫰娴滈箖姊婚崒娆戭槮闁硅绻濋幃鐑藉Ψ瑜夐崑鎾愁潩閻撳孩鐝濋梺绯曟杹閸嬫挸顪冮妶鍡楃瑨闁哥姵鑹惧玻鍧楀箛椤撶姷顔曢梺鍦帛鐢偟绮婚懡銈傚亾鐟欏嫭绀€缂傚秴锕獮濠囨倷閸濆嫀銊╂煏閸繃宸濋柣锝夌畺濮婄粯鎷呯粙娆炬闂佺ǹ顑呴幊搴e弲闂佸搫绋侀崢浠嬪磹瀹勬壋鏀介柣妯哄级婢跺嫰鏌i幘宕囩闁宠鍨块幃娆撴嚑椤戣儻妾搁梻浣告啞濮婄懓岣垮▎鎾寸畳闂備胶枪缁绘劙宕ョ€n剛鐭嗛悗锝庡亝閸欏繐鈹戦悩鎻掓殲闁靛洦绻堥弻鐔虹驳閸︻厾鐦堟繝纰樷偓宕囧煟鐎规洏鍔戦、娆撴煥椤栨矮澹曟俊銈忕到閸燁垶鍩涢幋锔界厾濠殿喗鍔曢埀顒佹礋瀵悂宕掗悙瀵稿幈闁瑰吋鐣崹褰掑煝閺囥垺鐓曢柍瑙勫劤娴滅偓淇婇悙顏勨偓鏍暜婵犲嫮鐭嗗〒姘e亾鐎规洜鏁婚、妤呭礋椤掑倸骞堟繝鐢靛仜濡鎹㈤幇鏉挎辈婵炲棙鍔戞禍婊堟煛閸ユ湹绨界紒澶樺枟椤ㄣ儵鎮欓弻銉ュ及闂佸湱枪閿曘儱顕ラ崟顖氱疀妞ゆ帊鐒﹀В鍡涙⒒閸屾艾鈧娆㈠顑肩細鐟滄梻鐦梺閫炲苯澧柍瑙勫灴閸ㄩ箖鎼归銏$亷闁诲氦顫夊ú蹇涘垂娴犲钃熼柛鈩冾殢閸氬鏌涢垾宕囩閻庢艾銈搁弻锝夋偄閸濄儳鐓傛繝鈷€鍕垫畼闁轰緡鍣i獮鎺楀箻妫版繃閿ゅ┑鐐差嚟閸樠囨偤閵娾晜鍋傞柡鍥ュ灪閻撴瑩鏌熼鍡楄嫰濞堝爼姊洪悷鏉挎毐婵炲樊鍙冨濠氬即閵忕姴鑰垮┑掳鍊愰崑鎾绘煛閸℃ḿ鎳囬柡灞界Ф閹风娀寮婚妷銉ュ強婵°倗濮烽崑娑㈩敄婢舵劕绠栭柍鍝勫暙閺嬪牆顭跨捄楦垮缂併劊鍎靛濠氬磼濮橆兘鍋撴搴g焼濞撴埃鍋撴鐐差樀閺佹捇鎮╅崘韫敾闂備焦瀵уú鏍磹瑜版帒鐤炬い蹇撶墛閻撶喖骞栧ǎ顒€鈧倕岣块幇鐗堢厵闁告縿鍎戠涵鍛罕婵犵數鍋為崹顖炲垂瑜版帗鍊块柛顭戝亖娴滄粓鏌熼悜妯虹仴闁哄鍊栫换娑㈠礂閻撳骸顫嶇紓浣虹帛閻╊垶鐛幘璇茬闁哄啫鍋嗛崯瀣煟鎼淬値娼愭繛鍙夅缚閹广垽宕奸妷褍绁﹂柣搴秵閸犳寮插┑瀣厓鐟滄粓宕滈悢濂夊殨闁告稑锕﹂悷褰掓煃瑜滈崜鐔奉嚕婵犳碍鍋勯柣鎾虫捣椤︻參鎮峰⿰鍐闁轰緡鍠栭埥澶愬閿涘嫬骞愰梻浣告啞娓氭宕板Δ鍛9闁规壆澧楅悡娑㈡倶閻愰鍤欏┑顔煎€块弻鐔碱敊閸濆嫧鍋撳┑鍡欐殾闁圭儤鍨熷Σ鍫熸叏濡も偓濡梻妲愰敓锟�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵噣宕奸悢鍛婎唶闂備胶枪椤戝棝骞愰崜褍鍨濇い鎾跺亹濡插牊淇婇婵愬殭婵炲憞鍥ㄢ拺婵炶尪顕ч獮妤呮煟閻斿弶娅婄€殿喖顭烽幃銏ゅ川婵犲嫮肖濠德板€х徊浠嬪疮椤栫儐鏁佺€广儱顦伴埛鎴犵磼鐎n亞浠㈡い鎺嬪灲閺岋紕浠︾拠鎻掝潎闂佺硶鏅濋崑銈夌嵁鐎n喗鏅濋柍褜鍓涙竟鏇㈠礂閸忕厧寮垮┑顔筋殔濡鐛弽顓熺厸闁糕剝顨堟晶锔芥叏婵犲懏顏犵紒顔界懃閳诲酣骞嗚婢瑰姊绘担鍛婃喐濠殿喚鏁诲畷婵單旈崨顓狀唹闂侀潧绻掓慨顓炍i崼銉︾厪闊洦娲栧暩濡炪倖鎸搁幖顐﹀煘閹达附鍊烽柛娆忣樈濡偟绱撴担铏瑰笡閻㈩垱顨堢划瀣箳濡や礁娈愰梺鍐叉惈閸熶即鏁嶅⿰鍛=闁稿本鐟╁鐑芥煕閵娿儳绉洪柣娑卞櫍楠炲洭鎮ч崼銏犲箞闂佽鍑界紞鍡涘磻閸涱厾鏆﹂悘鐐靛亾閸欏繐鈹戦悩鍙夊櫤妞ゅ繒濞€閺岀喐顦版惔鈾€鏋呴悗娈垮枛椤攱淇婇悜绛嬫晩闁荤喖顣︽竟鏇炩攽鎺抽崐鎾绘嚄閸撲礁濮柍褜鍓熷娲焻閻愯尪瀚板褜鍨辩换娑㈡偂鎼达絿顔掓繝纰樺墲閹倿寮崘顔肩劦妞ゆ巻鍋撴い鏇秮瀹曠ǹ螖娴e搫骞楅梺鐟板悑閻n亪宕濆鍛鐟滄棃寮婚悢鍏煎殟闁靛/鍛帒缂傚倷绀侀鍛此囬鐑嗘晣濠靛倻枪楠炪垽鏌熼柇锔跨敖闁烩晛閰e缁樻媴閸涘﹥鍎撶紓浣割儎缁舵艾鐣烽幋锕€绀嬫い鎺戝亞濞村嫰姊洪幐搴㈢闁稿﹤缍婇幃锟犳偄閸忚偐鍘甸梺璇″瀻閸涱喗鍠栫紓鍌欒閸嬫捇鏌涢幇鍏哥敖缁炬崘鍋愮槐鎾存媴鐠愵垳绱板┑鐐村絻椤曨參鍩€椤掑喚娼愭繛鍙夌墪閻g兘顢楅崘顏冭埅闂傚倷绀侀幉锛勬崲閸屾壕鍋撳顒€妲诲畝锝呮健瀵挳鎮欓埡鍌涙澑闂備胶绮敃鈺呭磻閸涱喖鍨斿ù鐓庣摠閸婂爼鏌i幇顖氱厫妞ゃ儱顦伴妵鍕敃椤愶紕鏁栫紓浣介哺閹稿骞忛崨瀛樻優闁荤喐澹嗛鑲╃磽閸屾瑦绁版い鏇嗗洦鍋嬮柟鎯х-閺嗭附绻涘顔荤盎闁绘帒鐏氶妵鍕箳瀹ュ顎栨繛瀛樼矋缁捇寮婚悢鍏煎€绘俊顖濇娴犳潙顪冮妶鍛畾闁哄懏绻勫Σ鎰板箳濡や礁浜瑰銈嗘⒒閸樠勬叏閺囥垺鈷戦梻鍫熺⊕閹兼劙鎮楀顓熺凡妞ゆ洩缍侀、姘跺焵椤掑嫬鏄ラ柍褜鍓氶妵鍕箳閹存繍浠肩紒鐐劤濞硷繝寮诲☉銏犵疀妞ゆ牗姘ㄥВ銏ゆ⒑閸濆嫭锛旂紒鐘虫崌瀵寮撮悢椋庣獮闂佸壊鍋呯换鍌涙叏婢舵劖鈷戦悶娑掆偓鍏呭濠电偛顕慨鎾敄閸℃稒鍋傞柣鏂垮悑閻撴瑩姊洪銊х暠濠⒀屽枤缁辨帡鎮▎蹇擃仴濞存粍绮撻弻鏇熺珶椤栨艾鏆曟俊鍙夊姍濮婅櫣鎷犻垾铏亞缂備緡鍠楅悷鈺呭Υ娴g硶妲堟俊顖氬槻閻楁岸姊洪崨濠傚闁告洖鐏氱紞妤€鈹戦悩鍨毄濠殿喚鍏橀妴鍌涚鐎n亞鍔﹀銈嗗坊閸嬫挾鐥紒銏犲籍鐎规洘妞介弫鎰板幢閹邦亞鐩庨梻渚€娼х换鍡涘礈濠靛牏鐭嗛悗锝庡枟閻撴稑霉閿濆毥褰掑焵椤掆偓濞硷繝鐛崘顔肩鐟滃苯鈻介鍫熺參婵☆垯璀﹀Σ鐑樸亜閺傛寧鍠樻慨濠傤煼瀹曟帒顫濋钘変壕闁绘垼濮ら崵鍕煠閸濄儲鏆╁ù鐘冲哺濮婄粯鎷呴崨濠冨創闂佺粯顨嗙划鎾崇暦濠婂啠妲堟慨姗嗗墮閻忓﹤鈹戦悙鍙夘棡闁圭ǹ鎽滅划缁樼節濮橆厼浠梺鎼炲労娴滄粓鎯冨ú顏呯厽闁靛牆鎳忛崰妯绘叏婵犲懏顏犻柛鏍ㄧ墵瀵挳鎮欏ù瀣珶闂傚倷娴囧畷鐢稿闯閿斿墽涓嶉柟鎯х-閺嗭箓鏌熸潏鍓х暠闁告劏鍋撻梻渚€娼ц噹闁告粈绀侀弲顓㈡⒒閸屾瑨鍏岀痪顓炵埣瀹曟粌鈹戞繝鍐╁櫡闂備浇顕х换鎰崲鐎n喖纭€闁规儼妫勯拑鐔兼煥濠靛棭妲哥紒鐘差煼閹鈽夊▎瀣窗濡炪倧璐熼崝宥囨崲濞戙垺鏅查柛娑卞枟閹瑩姊洪幐搴㈠濞存粠浜俊瀛樻媴缁洘顫嶅┑鈽嗗灦閺€閬嶆倵婵犳碍鈷戦柛锔诲幖閸斿绱掔拠鎻掆偓瑙勭┍婵犲洤绠柤鎭掑劗閹风粯绻涙潏鍓у埌闁硅櫕鐟╁畷鐑筋敇濞戞ü澹曞┑鐐村灦鐢鈻嶆繝鍕ㄥ亾鐟欏嫭绀€缂傚秴锕ら悾鐑芥倻缁涘鏅i梺缁樻磻閻掞妇绱炲Δ鍛拻濞达絿鐡斿ḿ鎰偓瑙勬礃閿曘垽銆佸鎰佹Ь婵犮垼顫夊ú鐔风暦濡ゅ懎绀傞柣鎾抽娴煎孩绻濈喊妯活潑闁搞劋鍗抽獮鏍敃閿曗偓缁犳牠鏌熺€涙ɑ鍎曢柡鍐ㄧ墕缁秹鏌涢銈呮毐闁归绮换娑㈠箻閺夋垹鍔伴梺绋款儐閹瑰洭寮诲鍫闂佸憡鎸婚惄顖氱暦閹存績妲堥柕蹇娾偓铏吅婵$偑鍊栭悧妤冪矙閹烘垟鏋嶉柣妯肩帛閸婂灚绻涢幋鐐垫喗缂傚倹姘ㄧ槐鎺楁偐閸愭彃濮㈤梻鍥ь樀閺屻劌鈹戦崱妯烘闂佸搫妫濇禍鍫曞蓟濞戞﹩娼╂い鎺斺拡娴滎亪宕洪妷锕€绶炲┑鐐灮閸犳牠寮婚妸褉鍋撻敐鍛粵缂傚秴鐭傚濠氬磼濞嗘垹鐛㈠┑鐐板尃閸涱喖搴婇梺绯曞墲缁嬫垿鎮為崹顐犱簻闁瑰搫妫楁禍楣冩⒑閸涘鎴︽偋閻樿尙鏆︽繛鍡樻尰閸ゅ秹鏌曟竟顖氭噽濡插洭姊绘担鍦菇闁搞劏妫勫玻鑳槻闁烩槅鍙冨缁樻媴閻熼偊鍤嬪┑鐐村絻缁绘ê鐣烽幇顑芥斀閻庯綆浜為悾娲偡濠婂啯鎹i柟骞垮灩閳规垹鈧綆浜為崐鐐烘偡濠婂啰绠荤€殿喗妲掗ˇ鍙夈亜椤忓嫬鏆e┑鈥崇埣瀹曞崬螖閸愵亝鍣梻浣筋嚙鐎涒晠宕欒ぐ鎺戠煑闁告劦鍠栫粻鏍煥閻斿搫孝閸烆垶姊洪崘鍙夋儓闁稿﹤顭峰畷銏$鐎n偀鎷洪梺鍛婄箓鐎氼厼顔忓┑瀣厱閻庯綆鍋嗗ú鎾煕閳规儳浜炬俊鐐€栧濠氬磻閹惧绡€闁逞屽墴閺屽棗顓奸崨顖氬Е婵$偑鍊栫敮濠囨嚄閸洖鐤柡灞诲劜閻撴瑩鏌涢幋娆忊偓鏍偓姘炬嫹

相关话题/

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19