




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
S.PO.P語義分析、生成中間代碼生成目標程序代碼優化語法分析程序詞法分析程序錯誤處理符號表管理知識結構任務:根據文法規則,從源程序單詞符號串中識別出語法成分,并進行語法檢查。兩大類分析方法:自頂向下分析自底向上分析語法分析的任務+若xS則xL(G[S])否則xL(G[S])G[S]存在主要問題:回溯問題,左遞歸問題主要方法:遞歸子程序法、LL分析法自頂向下分析算法的基本思想為:自底向上分析算法的基本思想為:+若xS則xL(G[S])否則xL(G[S])G[S]存在主要問題:“可歸約串”的識別問題主要方法:算符優先分析法、LR分析法5.1自頂向下分析法自頂向下分析的一般過程從S出發采用最左推導,試圖逐步推出輸入串α,αL(G[S])?S作為語法樹的根,試圖自上而下地為α構造一棵語法樹若葉結點從左向右排列恰好α,則表示α是文法的句子,而這棵語法樹就是句子α的語法結構若構造不出語法樹,則α不是文法的句子自頂向下分析方法分類確定的不確定的回溯【例】
G1[S]:S→pA|qBA→cAd|aB→dB|c識別輸入串w=pccadd是否是G1[S]的句子試探推導過程:SpApcAdpccAddpccadd試探成功
這個文法的特點:1、每個產生式的右部都由終結符號開始2、如果兩個產生式有相同的左部,那么它們的右部由不同的終結符開始【例】
G2[S]:S→Ap|BqA→a|cAB→b|dB識別輸入串w=ccap是否是G2[S]的句子試探推導過程:SApcApccApccap試探成功
這個文法的特點:1、產生式的右部不全是由終結符開始2、如果兩個產生式有相同的左部,它們的右部是由不同的終結符或非終結符開始3、文法中無空產生式1.FIRST集FIRST(α):從α可能推導出的所有開頭終結符號或ε對于文法G的所有非終結符的每個候選式,其終結首符號集稱為FIRST集,定義如下:,則規定∈FIRST()若【例】
S→aAbA→cd|ca…,a∈VTFIRST()={a|FIRST(aAb)={a}FIRST(cd)={c}FIRST(c)={c}【例】
S→AaA→a|
FIRST(a)={a}FIRST()={}FIRST(Aa)={a}FIRST(S)={a}FIRST(A)={c}FIRST(S)={a}FIRST(A)={a,}(1)若α=aβ,且a∈VT,則a∈FIRST(α);
例:FIRST(i)={i}FIRST(+TE')={+}E→TE'E'→+TE'|T→FT'T'→*FT'|F→(E)|i構造FIRST集的算法(2)若α=Xβ,X∈VN,且有產生式X→b…,則把b加入到FIRST(α)中;
例:FIRST(FT')={(,i}??(3)若α=X1X2…Xn,其中Xi∈VN,1≤i≤n;①將FIRST(X1)中的一切非ε的終結符加進FIRST(α);②若ε∈FIRST(X1),則將FIRST(X2)中的一切非ε的終結符加進FIRST(α);③若ε∈FIRST(X1)且ε∈FIRST(X2),則將FIRST(X3)中的一切非ε的終結符加進FIRST(α);④依此類推,若對于一切1≤i≤n,ε∈FIRST(Xi),則將ε加進FIRST(α)。E→TE'E'→+TE'|T→FT'T'→*FT'|F→(E)|i例:FIRST(FT')=
注意:要順序往下做,一旦不滿足條件,過程就要中斷進行FIRST(F)-{ε}={(,i}【例】
G2[S]:S→Ap|BqA→a|cAB→b|dB識別輸入串w=ccap是否是G2[S]的句子試探推導過程:SApcApccApccap試探成功
FIRST(Ap)={a,c}FIRST(Bq)={b,d}FIRST(F)={(,i}FIRST(T’)={*,ε}FIRST(T)=FIRST(F)-{ε}={(,i}FIRST(E’)={+,ε}FIRST(E)=FIRST(T)-{ε}={(,i}【例】G[E]E→TE'E'→+TE'|T→FT'T'→*FT'|F→(E)|i計算文法中非終結符的First集合【例】
G3[S]:S→aA|dA→bAS|ε識別輸入串w=abd是否是G3[S]的句子試探推導過程:SaAabASabSabd試探成功
這個文法的特點:1、含有空產生式2、非空產生式右部首符號集合兩兩不相交3、緊跟該非終結符右邊可能出現的終結符集合也不相交2.FOLLOW集FOLLOW(A):是所有句型中緊接A之后的終結符號或#對于文法G的非終結符的后繼符號集稱為FOLLOW集,定義如下:…A,則規定#∈FOLLOW(A)若S…Aa…,a∈VT}FOLLOW(A)
={a|S
E→TE'E'→+TE'|T→FT'T'→*FT'|F→(E)|iT+TE'
,則+∈FOLLOW(T)E構造培集合FO抽LL滋OW的算勻法(1席)若A為開壓始符嶄號,攜則把呼“#顆”加統入FO亮LL途OW銹(A湊)中;(2賠)若B→A(≠),則把FI續RS學T()-索{}加入FO疤LL更OW妙(A按)中;注:FO旬LL蕉OW集合香中不攏含有ε(3)若B→A或B→A,且則把FOLLOW(B)加入FOLLOW(A)中。,E→TE'E'→+T攏E'|T→FT'T'→*F支T'|F→(E史)|其i#∈FO包LL零OW遍(E套)由F→充(E僑)可知喝,)∈FO礦LL赤OW正(E欣)由E→陜TE嬸',應把FO梨LL擁OW哪(E孩)加入屆∈FO初LL擦OW宰(E')由E'→+TE避'且E'ε武,應把FO笑LL怎OW常(E')加入FO咬LL釋OW罰(T古)【例跨】G[售E]E→TE'E'→+T斑E'|T→FT'T'→*F極T'|F→(E牲)|貿iFO私LL甘OW遙(E蹄)=脈{#董,)列}∵E是開童始符喝號∴傅#∈FO晌LL拔OW磁(E助)又F鹿→(袋E)按∴碑)∈支FO蘭LL餃OW辜(E蒙)FO小LL四OW丹(E慣’)抱={倚#,別)}∵E艱→閑T愚E’獸∴葉FO沙LL塘OW領(E還)加入FO仿LL鉆OW條(E遺’)FO椅LL捷OW況(T壘)=典{+映,)次,#堅}∵E翻’計→得+T咬E’適∴炎FI壞RS叼T(暮E’賠)-而{ε用}加入FO忌LL翻OW你(T俗)又E’ε范,∴尿FO企LL億OW濁(E重’)加入FO膊LL厭OW廢(T讀)FO賞LL恢OW鋪(T內’)牽=敵FO偽LL取OW砌(T脹)=甜{錦+,姐),喂#}∵T松→彼F購T’隔∴閑F吳OL毀LO攪W(倘T)加入FO握LL雅OW歲(T逐’)FO口LL緞OW殊(F坦)=旗{*義,+糠,)珍,#黑}∵T且→并F紋T’分∴提F腎OL幻玉LO慌W(葬F)延=F伍IR褲ST喬(T巧’)長-{橫ε}又T’ε∴疲FO濃LL押OW方(T爹)加入FO別LL糧OW揪(F訂)FI壤RS修T(餃F)話={留(,透i}FI占RS甘T(慈T’強)=喘{*舞,ε法}FI陷RS慣T(鍵T)耳=度{(造,i竿}FI雷RS懸T(久E’蔥)=逼{+鍛,ε威}FI逗RS迅T(隙E)硬={烈(,趕i}求FO狡LL薯OW集合LL的含毀義-自辦左向樹右掃遣描分廁析輸另入符堤號串-從壓識別惹符號脹開始貍生成希句子坡的最爽左推施導LL惕(1穿):向前僚看一域個輸秒入符崖號,焦便能拴唯一鬧確定移當前甜應選研擇的她規則LL杰(k股):向前法看k個輸漲入符劇號,割才能斥唯一魂確定卻當前譽應選附擇的害規則5.壞2LL捧(1移)文法循的判洽別要構跳造確縫定的滑自頂獅向下照分析營程序背要求背描述役文法慨必須胳是LL免(1驢)文法紋。一個桐文法G是LL房誠(1雀)的,潑當且梨僅當兆對于G的每血一個構非終確結符書A的籌任何倚兩個谷不同義產生求式Aαβ,下面教的條純件成亮立:1.FI約RS縫T(α)∩F擴IR閣ST補(β)疤=旱,也就墊是α和β推導影不出肢以同蒙一個轉終結地符a為首傻的符震號串舌;它闖們不視應該大都能冠推出.2.羽假若β=>,那么護,FI將RS炮T(α)∩荷FO龍LL膝OW翼(A擁)=.也就隊是,若β=>舟,則α所能汪推出悠的串分的首牙符號潛不應等在FO遣LL狹OW腐(A沃)中.**若α=>ε,則SE幸LE畫CT衰(Aα)=秧Fi代rs猴t(α)若α=>ε,則SE劫LE峽CT壘(Aα)=扎(F凈ir波st萬(α)-盜{ε})殊∪F飛ol改lo繼w(羽A)**一個領文法捷是LL匹(1鬧)的充要向條件:對于膜每個棄形如Aαβ的產生蓬式,陪滿足Se幣le拼ct隔(Aα)∩Se窯le耳ct行(Aβ)律=其中酷:α、閥β不能障同時襯推出εLL炕(1棗)文法淺的判陡別條買件求出曠能推雞出ε的非終結富符計算Fi經rs耐t集合計算Fo嚼ll騙ow集合計算Se版le倉ct集合不滿真足Se玩le抱ct婆(Aα)∩Se瓣le閣ct癢(Aβ)軌=的不防是LL周(1另)文法干,否隨則是LL希(1羨)文法孕。LL技(1慰)文法資的判緣瑞別步尺驟【例煙】G[訴E]辜:E→TE'E'→+T闊E'|T→FT'T'→*F爆T'|F→(E買)|喪i判別棋該文繞法是瀉否為LL嫌(1包)文法亦?FI紅RS哀T(背F)績={集(,鹿i}FI殘RS持T(者T’騎)=錘{*史,ε醫}FI描RS谷T(酬T)菠=毀{(撈,i炭}FI僑RS轎T(腦E’答)=貫{+耕,ε繪}FI青RS賤T(謠E)略={溉(,啄i}FO幅LL膽OW律(E遭)=役{)米,#龍}FO謀LL送OW憂(E乎′)言={岔),旦#}FO鏈LL漂OW隸(T歪)=線{+甚,)漁,#常}FO巧LL剛OW兄(T誤′)品={谷+,檢),擦#}FO傭LL汪OW尤(F萬)=曲{*籌,+存,)世,#址}E’姓–機>流+T調E’姨|FI怒RS策T(頃+T救E')=意{+蔑}FO繭LL休OW狀(E')=炮{)臟,#蔥}T’燃–貓>失*F證T’搏|FI恨RS圓T(樂*F煮T')=邀{*那}FO系LL創OW白(T')=和{+殘,)吳,#談}F僵–>浸(獨E)樸|族iFI低RS確T(邪(E構))懸={括(}FI堵RS窩T(膠i)壩={必i}所以G[下E]是LL膽(1圾)的【例偉】G[虎E]炊:E→TE'E'→+T賠E'|T→FT'T'→*F此T'|F→(E善)|止i例1:設摧有文改法(1養)S控->xA終y(2憤)婚A冒->停*按*|貫*現有迎輸入武串:x*丟y其分常析過尋程如毒下:SxAy**失敗凱,需概要退落回,老重新趁選取A的侯延選式這時面使得盤分析恩器的貸動作科不穩爸定產生解的原食因?x*y輸入符號串:*自頂圖向下冤分析駕面臨其的問風題問題1:回星溯1.錘回溯蠢問題什么杯是回梅溯(ba味ck負tr能ac姥ki仁ng轟)?分析慌工作粗要部塑分地艱或全粘部地芹退回所去重社做叫回溯造成最回溯俱的條耐件:文法頂中,隔對于贏某個渣非終湊結符抓號的規則咳其右貴部有諸多個盞選擇,并法根據胖所面挑臨的股輸入本符號飯不能石準確躍的確甲定所立要選柄擇時霧,就孩可能縫出現侍回溯欠。回溯臣帶來炎的問貨題:嚴重遺的低效遣率:語出法分釣析要幼重做構、語榆義處黨理工鄙作要莖推倒化重來自頂姜向下背分析府存在蝦的主租要問材題迷宮茂求解消除戴回溯匠的途到徑:改寫遮文法對具搭有多盡個右就部的亞規則反復提取左因臨子【例蘭】對饒下述楊兩個醉產生泳式,創提取硬公共視左因旗子改洲造文尤法。<if語句禽>→if菌E押t戰he筆nS1el光seS2<i冠f語句喂>→if耳E叉t憶he頃nS1<if語句姐>→if供E厘t汽he開nS1UU→磨e芽ls跪eS2|εA→α橋β1|αβ2|…獻|αβn如果β1~βn中還面有幾塵個首圈符號雕相同處,可部反復容提取引入站了許牛多非錯終結固符和ε產生潮式A→αA′A′→β1|β2|…|βn1.覆遞歸漫規則:規蛙則右倆部有孕與左殊部相板同的見符號左遞斷歸規啊則:A→傷A…右遞工歸規勺則:A→偷…A自嵌搶入遞麥歸規求則:A→蓬…A拴…遞歸真文法2.棉遞歸量文法:含有肝遞歸幫規則寒的文法,膏為直接鑼遞歸文法A→BaB→AbG[S]:S→L|SL|SDL→a|b|…|zD→0|1|…|9間接遞歸文法遞歸戚文法擱的優點:可屬用有臘窮條叔規則梁,定晃義無妻窮語舟言例:室對于廁前面雄給出卻的無剪符號滲整數綢的文俘法是郊有遞職歸文彼法,蓮用1擠2條坑規則穗就可蕩以定往義出量所有真的無樣符號統整數浙。若跌不用督遞歸未文法彼,那喇將要緒用多膊少條漿規則治呢?!G[擾S]:S→反SD點|DD→幅0|蛋1|常2|調3|宣4|鴨5|學6|絲式7|趴8|疊9左遞歸淚文法幣的缺點:不吐能用銜自頂父向下畜的方里法來博進行幻玉語法喇分析會造移成死歲循環G[悶E]:E→先i+數i|纖i*猜i|狡(i躬+i撲)*抽i該文瘦法所籌描述睜的語賞言為L(疲G)告={看i+右i,脅i*謀i,晉(i傘+i吹)*馬i}定,無法膏表示泳無窮帶的表贊達式芝語言2.燭左遞陳歸問添題【例兼】文婚法G[螺E]張:E→廢E+詢T|賽TT→禽T*于F|球FF→糟(E六)|欺i給出i*厲i+跟i自頂奶向下熊的分和析過閃程。要實堂行自柿頂向嘉下分挨析,君必須含要消兆除文晃法的戴左遞遼歸從左吉向右鮮掃描綱源程托序,鐮同時諒實施杠最左項推導EE+TE+TE+T…失敗阿:由翼于使嚴用最縮慧左推濱導,付對左扁遞歸被文法況進行樓自頂決向下砍分析旁時,枕會導拖致死歪循環紡。將左嬸遞歸滲規則貴改為抽右遞谷歸規串則A→A|【例倒】文賄法G[壺E]侄:E→礙E+爸T|圍TT→絮T*伍F|拳FF→率(E獄)|桌iE→TE'E'→+T娘E'|T→FT'T'→*F遲T'|F→(E李)|證i消除左遞歸A→A'A'→A'|(1)消除沫直接債左遞白歸消除敬直接掩左遞彎歸—砌—課錄內練艱習文法G震:PPa燒Pb|Ba挺P轉化澡為:PBa噴PP`P`癥aP持bP`|注:只誤有最軋左邊騾的P參加葬變換帝。(2撫)消持除間蠻接左漏遞歸吼(了井解自沒學)先通過箭產生慌式進號行非覽終結矛符置昆換將間懂接左榨遞歸灶變為狀直接跪左遞累歸消除孫直接窗左遞蹲歸把置喇換的訪產生連式加瓶入詳例造見書暈文法G6央,P夫895.往3窄某數些非LL肉(1舒)文法條到LL蛙(1警)文法齊的等辮價轉響換消除左遞歸和提取公共左因子
【例耗】G[挑S]讓:S→aS被b|AA→bA丑c|bB代cB→Ba|aS→aSb|AA→bAc|bBcB→aB'B'→aB'|消除左遞歸提取公因子S→aSb|AA→bA'A'→Ac|BcB→aB'B'→aB'|LL(1)文法的判別條件LL(1)文法【例壟】G[逐S]屑:S→aS副b|AA→bA溜c|bB滋cB→Ba|a不確都定的弦自頂扯向下鑄分析涌思想當文法雞不滿助足LL董(1蔥)時,馬不能艷用確濾定的生自頂賺向下狡分析員,但糊可用稿不確嗎定的紗自頂護向下姥分析就,也抵就是帶回濃溯的自窄頂向據下分恢析法學(試劫探)櫻。由于魂相同固左部承的產朗生式釣的右蘭部Fi袖rs筋t集交餓集不折為空鋒引起由于納相同記左部遭非終稈結符羊的右統部存就在能替推導害出的產芽生式章,且映該非銷終結膛符的Fo既ll模ow集中蜂含有爸其他舞產生墊式右啊部Fi枝rs外t集的犁元素文法株含左震遞歸確定柱的自朗頂向喪下分行析方么法遞歸斷子程逢序法對文法中的每個非終結符(語法成分)編寫一個子程序,而子程序的代碼結構由相應非終結符的產生式右部所決定:產生式右部的終結符與輸入符號相匹配非終結符與相應的子程序調用對應構造方法非常簡單程序結構清晰遞歸調用較多,占用內存多、速度慢如果所采用的高級語言不允許遞歸,則不能使用此方法
特點自左向右掃描分析輸入符號串從識別符號開始生成句子的最左推導LL(1):向前看一個輸入符號,便能唯一確定產生式LL(k):向前看k個輸入符號,才能唯一確定產生式基本羨思想編:LL鋼(1監)分析法使用升下推處自動牌機的驢方式湖實現憂。使用殼一個嫩二維靈分析振表和鳳棧聯虜合進疫行控配制來宰實現衡分析曉。確定抹的自耗頂向冬下分箏析方遷法預測廚分析口法a1a2a3…ai…an#
分析表M總控程序X1…Xn-1Xn#LL跌(1籌)分析憑器的認邏輯最結構炮:分析宗棧、揮分析產表、番總控勞程序文法先符號根據龍棧頂草符號X和當繞前輸脾入符妥號a來決摧定分梢析器井的動子作在實遇際語腹言中陷,每甩一種最語法射成分則都有餐確定享的左小右界忽符,葬為研氏究問麗題方唯便,先統一斯以‘#’表洪示輸袋入串蚊結束分析表:二維矩陣MA→αi
A∈Vn、αi∈V*、a∈VTor#errorM[A,a]=E→TE'E'→+T澡E'|T→FT'T'→*F銹T'|F→(E燙)|予i
i
+
*
(
)
#
E
E→TE'
E→TE'
E'
E'→+TE'
E→ε
E→ε
T
T→FT'
T→FT'
T'
T'→ε
T'→*FT'
T'→ε
T'→ε
F
F→i
F→(E)
第1列為長非終局結符第1行為軟終結勿符+’僵#’每個幣元素盯為產腸生式叉或空分析展表中文的元襯素表奴示:較在分雕析時戰需要呀將A展開短,如方果當甚前符肅號為a時,當應該拆選擇際元素M[槳A,隔a]中存義放的飽產生擠式。利如果M[警A,使a]為空拋,表自示出皆現語族法錯皮誤。預測劣分析喉表構年造算核法1.逼對每糞個終慮結符aSe縱le活ct但(A),把A加至[A,恥a]中;2.把砌所有題無定層義的[A,陸a]標上假“出頃錯標變志”挺。可以館證明享,一隙個文楚法G的預促測分渠析表銹不含述多重革入口督,當剩且僅嗚當該贊文法岸是LL燃(1霉)的如果消文法慣是LL傾(1形)文法咱,其您預測伏分析修表中召沒有麻多重覽定義跌的元罷素,辮可以絹進行孕確定億的分映析。E→TE'E'→+T捎E'|T→FT'T'→*F多T'|F→(E土)|鞠i
i
+
*
(
)
#
E
E→TE'
E→TE'
E'
E'→+TE'
E→ε
E→ε
T
T→FT'
T→FT'
T'
T'→ε
T'→*FT'
T'→ε
T'→ε
F
F→i
F→(E)
請按照犧上述您算法旬構造企分析巾表總控兵程序訴算法改描述將’射#’聰壓入套堆棧湖中,將開狡始符然號S壓入炭堆棧菊中讀取狗下一獲個符陶號到a;每次育執行暑下述皺動作姐:棧頂牌符號誘彈出織放入X中;如果X為終結故符號:如果X醉=閑=糖a令=槽=途‘#館’,分析征結束碎,接掌受句典子。如果X隨=旁=腹a淹!=禽‘辨#’且,表明成功木匹配;X出棧火,a取下換一個浙符號如果X閑!=墾a竿,出錯浩處理。如果X為非終來結符校號,負則查意分析誼表M:如果M[瘡X,監a]為空蕩,出壓錯處宴理。如果M[宅X,喝a]久=‘餃X1X2…Xn’,則:{X出棧貿;將右暖部Xn…X2X1反序壓入S中。}步驟媽符雙號棧貝讀入補符號鑒剩撕余符社號串那使酷用產獨生式1.懶#E黨i闊+釋i*允i#兄E→TE勾’2.硬#E’鴨T柱i侍+鋤i*打i#東T→FT失’3.常#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司標準化制度管理制度
- 培訓班學員登記管理制度
- 縣醫院投訴接待管理制度
- 公司員工接送車管理制度
- 勞務公司施工隊管理制度
- 租賃gps車輛管理制度
- 萬融實驗室安全管理制度
- 施工單位員工管理制度
- 后勤機關工作餐管理制度
- 化工廠靜態設備管理制度
- 招標代理公司內部監督管理制度
- 達林頓三極管
- 電力電子單相橋式整流電路設計報告
- 正常心電圖及常見心律失常心電圖的表現
- 蠟筆小新優質獲獎課件
- 油罐車駕駛員日常考核細則
- 主體結構工程驗收自評報告
- 中國音樂史與名作欣賞智慧樹知到答案章節測試2023年吉林師范大學
- 各級醫療機構醫院分級診療18個常見病分級診療流程(2023年版)
- BEC商務英語中級考試閱讀真題
- GB/T 41735-2022綠色制造激光表面清洗技術規范
評論
0/150
提交評論