編譯原理二

語法分析

整章開篇

  • 語法分析分為兩類即自頂向下和自底向上兩種橡疼。

文法和語言

  • 語言:對字母表\Sigma來說趁怔,\Sigma*上的任意一個(gè)子集都成為\Sigma上的一個(gè)語言序目,記為L(L\subset\Sigma*)腥泥。
  • 句子:該語言的每一個(gè)字符串成為其的一個(gè)語句或句子碎税。
  • 文法:文法表示成四元組 G[S] = (VT,VN,S,\xi)
    1. VT是終結(jié)符集尤慰,是非空有限集,它的每個(gè)元素是終結(jié)符雷蹂。
    2. VN是非終結(jié)符集伟端,是非空有限集,每個(gè)元素是非終結(jié)符匪煌。并且VT\capVN=\Phi
    3. S是文法開始符责蝠,是特殊的非終結(jié)符號(hào)(S\subsetVN
    4. \xi是產(chǎn)生式的非空有限集 產(chǎn)生式舉例:\alpha\rightarrow\beta
    5. \alpha\in(VT\cupVN)+且至少有一個(gè)非終結(jié)符,不能是空串萎庭,\beta\in(VT\cupVN)*
    6. 終結(jié)符不可再分霜医,通常是一個(gè)語言的字母表,代表語法的最小元素驳规,是一種個(gè)體記號(hào)肴敛。非終結(jié)符也稱語法變量,代表一個(gè)一定的語法概念(一個(gè)類,一個(gè)集合)医男。文法開始符號(hào)代表語言的目標(biāo)砸狞,其它語法實(shí)體只是構(gòu)造語言目標(biāo)的隨機(jī)變量。(元語言是描述其它語言的語言昨登,產(chǎn)生式右側(cè)的表達(dá)式是產(chǎn)生式左側(cè)的一個(gè)候選式趾代,它與\rightarrow一樣都是元語言符號(hào)(不屬于\Sigma的字符))
    7. 寫文法的題型暫時(shí)忽略,考試有現(xiàn)場蒙
  • 文法產(chǎn)生的語言:A\rightarrow\delta丰辣,則稱\alphaA\beta\Rightarrow\alpha\delta\beta為直接推導(dǎo)
  • 形式語言的分類
    1. 0型文法與0型語言(對應(yīng)圖靈機(jī))
    2. 1型文法與1型語言(對應(yīng)線性界限自動(dòng)機(jī),自然語言)
    3. 2型文法與2型語言(對應(yīng)下推自動(dòng)機(jī)禽捆,程序設(shè)計(jì)語言)
    4. 3型文法與3型語言(對應(yīng)有限自動(dòng)機(jī))

推導(dǎo)與語法樹

  • 最右推導(dǎo):所給句子推導(dǎo)隊(duì)列中每一步推導(dǎo)都是對句型中的最右非終結(jié)符用相應(yīng)產(chǎn)生式的右部進(jìn)行替換笙什,最左推導(dǎo)同理。(實(shí)在替不了先別替)最右推導(dǎo)是規(guī)范推導(dǎo)胚想,它的逆過程是規(guī)范規(guī)約(最左規(guī)約)
  • 短語:設(shè)\alpha\beta\delta是文法G[S]的一個(gè)句型琐凭,有S\Rightarrow\alphaA\delta且A\Rightarrow\beta,則\beta是關(guān)于該句型的一個(gè)短語浊服。有A\rightarrow\beta則為直接短語或簡單短語统屈。兩個(gè)條件缺一不可,短語屬于該句型的組成部分牙躺,不能破壞句型結(jié)構(gòu)的限制愁憔。
  • 句柄:一個(gè)句型的最左直接短語叫句柄
  • 素短語:含有終結(jié)符性質(zhì)的短語,如果不存在具有相同性質(zhì)的真子串孽拷,則該短語為素短語吨掌。
  • 語法樹:根節(jié)點(diǎn)是文法開始符號(hào)S,內(nèi)部節(jié)點(diǎn)一定是非終結(jié)符脓恕,別到處瞎標(biāo)\varepsilon膜宋,它必為葉節(jié)點(diǎn)且是其父節(jié)點(diǎn)的唯一子節(jié)點(diǎn)。
  • 根據(jù)語法樹找短語什么的:
    1. 語法樹某個(gè)節(jié)點(diǎn)+其后代是子樹(只含單層分支也就是兩代節(jié)點(diǎn)的樹叫簡單子樹)
    2. 短語:子樹(所有)末端節(jié)點(diǎn)組成的符號(hào)串是子樹相對于子樹根的短語
    3. 直接短語:簡單炼幔。秋茫。。乃秀。肛著。。环形。策泣。。抬吟。萨咕。。火本。危队。聪建。。茫陆。
    4. 句柄:最左簡單金麸。。簿盅。挥下。。桨醋。棚瘟。。喜最。偎蘸。。瞬内。迷雪。。虫蝶。章咧。。秉扑。
    5. 素短語:子樹的末端節(jié)點(diǎn)組成的符號(hào)串含終結(jié)符慧邮,且在該子樹中不再有包含終結(jié)符的更小子樹。
  • 二義性:文法的一個(gè)句子能找到兩種不同的最左推導(dǎo)或最右推導(dǎo)舟陆,就是二義性句子误澳,包含該句子的文法就是二義性文法。(比如乘法優(yōu)先或加法優(yōu)先兩種)秦躯,文法二義性不代表語言二義性忆谓。不改變文法中原有的語法規(guī)則,僅加進(jìn)一些語法的非形式規(guī)定踱承。(可以加一些約束條件倡缠,比如乘法優(yōu)先,并且都左結(jié)合)或構(gòu)造一個(gè)等價(jià)的無二義性文法(比如加非終結(jié)符P43)茎活。

自頂向下的語法分析

  • 遞歸向下分析法:
    1. 含左遞歸以及回溯使自頂向下分析存在不確定性昙沦。
    2. 消除左遞歸:
      A\rightarrowA\alpha|\beta
      改寫:A\rightarrow\betaA'
      A'\rightarrow\alphaA'|\varepsilon

例子:

IMG_20190614_203237.jpg

3. 消除回溯:(有\delta則A'哪里產(chǎn)生空)
IMG_20190614_203807.jpg

  • LL1分析法(預(yù)測分析法):自左向右掃描輸入串,最左推導(dǎo)载荔,只向右查看一個(gè)符號(hào)就可決定如何推導(dǎo)
    1. 分析表的構(gòu)造法:求FIRST和FOLLOW盾饮。方法如下:

      IM.jpg

      IMG_20190614_205410.jpg

      其實(shí)很簡單:練一下就會(huì)
      比如例題3.8


      pra.jpg

      之后構(gòu)造分析表
      new.jpg

      IMG20190614212631.jpg
    2. 分析一個(gè)輸入串
      方法是:相同同消,不同規(guī)約之后反向壓入棧(只是符號(hào)棧規(guī)約)
      ,兩#分析成功丘损,符號(hào)棧初始?jí)喝?和起始符號(hào)


      IMG_20190614_213237.jpg

自底向上語法分析

  • 是一種“移進(jìn)—規(guī)約”法普办,一旦棧頂符號(hào)形成某個(gè)句型的句柄就進(jìn)行一次規(guī)約。
  • 算符優(yōu)先分析法:
  • 算符優(yōu)先文法:
    1. 首先定義一個(gè)任何產(chǎn)生式的右部都不含兩個(gè)相繼(并列)的非終結(jié)符的文法為算符文法徘钥。
    2. 定義任何兩個(gè)可能相繼出現(xiàn)的終結(jié)符a與b(它們之間最多插有一個(gè)非終結(jié)符)的優(yōu)先關(guān)系衔蹲。詳情參考圖片(后面+則G[S]是一個(gè)算符優(yōu)先文法):
      14.jpg
    3. 算符優(yōu)先分析表的構(gòu)造
      FIRSTVT的構(gòu)造:(搞P)
      如果存在產(chǎn)生式P\rightarrowa...或P\rightarrowQa...
      若有產(chǎn)生式P\rightarrowQ...,則FIRSTVT(Q)\subsetFIRSTVT(P)
      LASTVT的構(gòu)造:(搞P)
      如果存在產(chǎn)生式P\rightarrow...a或P\rightarrow...aQ
      若有產(chǎn)生式P\rightarrow...Q呈础,則LASTVT(Q)\subsetLASTVT(P)
      循環(huán)求好幾遍即可
      優(yōu)先關(guān)系表的構(gòu)造:
      15.jpg

      例題嘗試:
      sf.jpg

      分析過程
      sffx.jpg
  • 優(yōu)先函數(shù)
    1. 關(guān)系圖法構(gòu)造優(yōu)先函數(shù)(Bell方法)


      關(guān)系圖.jpg

規(guī)范歸約的自底向上語法分析方法

LR分析法是自左向右自底向上規(guī)約
記住歷史:
展望未來:

  • LR0分析器
    活前綴:(字的前綴指字的首部,比如字abc前綴有\varepsilon而钞,a,ab笨忌,abc俱病」倨#活前綴就是規(guī)范巨型的一個(gè)前綴,不含句柄之后任何符號(hào)途凫。
  • 圓點(diǎn)在最右端是規(guī)約項(xiàng)目溢吻,文法開始符號(hào)的規(guī)約項(xiàng)目是接受項(xiàng)目维费,不再最右端是待約項(xiàng)目。
  • 為了使接受狀態(tài)易于識(shí)別促王,將文法進(jìn)行拓廣犀盟。S'\rightarrowS\centerdot是唯一的接受態(tài)蝇狼。
  • 構(gòu)造LR0分析表的過程:
    1. 拓廣文法
    2. 列出LR0的所有項(xiàng)目。
    3. 構(gòu)造項(xiàng)目集規(guī)范族迅耘。先以起始符號(hào)開寫,之后順勢寫纽哥,一項(xiàng)一項(xiàng)移(會(huì))栖秕。
    4. 構(gòu)造dfa
    5. 構(gòu)造分析表:首先看Ii的發(fā)出Ik箭頭為終結(jié)符,action表I行終結(jié)符列填Sk,非終結(jié)符則是goto填k够滑,Ii中含規(guī)約項(xiàng)目吕世,將產(chǎn)生式標(biāo)記的序號(hào)rj全填入action第i行,含接受項(xiàng)目在action子表終結(jié)符“#”列欄填入acc命辖。
    6. 練習(xí):
    lr0.jpg
  • SLR(1)分析
    1. 先找出dfa
    2. 找出規(guī)約項(xiàng)目(包括接受項(xiàng)目)
    3. 求FOLLOW集:如果A\rightarrow\alpha\centerdota\beta屬于Ik且由Ik發(fā)出的標(biāo)記為a的有向邊落在Ij上尔艇,置ACTION[k,a]為Sj,若待約項(xiàng)目A\rightarrow\alpha\centerdotB\beta终娃。。余佛。窍荧。。蕊退。(同上),GOTO置為j净蚤,規(guī)約項(xiàng)目屬于Ik則僅當(dāng)a\inFOLLOW(A)時(shí)茉贡,ACTION[k,a]為ri,ACTION有移進(jìn)規(guī)約沖突項(xiàng)目腔丧,都填,goto無此情況愉粤。
    4. 移進(jìn)的FIRSTb和規(guī)約的F O L L O W(S)交集為空則不產(chǎn)生沖突。(與lr0區(qū)別就是r不都填如蚜,就填follow)
    5. 練習(xí)暫時(shí)忽略(因?yàn)榭赡懿豢迹?/em>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市探赫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伦吠,老刑警劉巖魂拦,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箱靴,居然都是意外死亡荷愕,警方通過查閱死者的電腦和手機(jī)衡怀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門狈癞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茂契,“玉大人慨绳,你說我怎么就攤上這事∑暄” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵璧亚,是天一觀的道長脂信。 經(jīng)常有香客問我,道長狰闪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任幔欧,我火速辦了婚禮,結(jié)果婚禮上觉义,老公的妹妹穿的比我還像新娘浴井。我一直安慰自己,他們只是感情好滋饲,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布屠缭。 她就那樣靜靜地躺著,像睡著了一般呵曹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铐殃,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天跨新,我揣著相機(jī)與錄音,去河邊找鬼赘被。 笑死肖揣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的龙优。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼野舶,長吁一口氣:“原來是場噩夢啊……” “哼宰衙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巢掺,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎考余,沒想到半個(gè)月后轧苫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡身冬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年岔乔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘿歌。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茁影,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出步脓,到底是詐尸還是另有隱情浩螺,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布年扩,位于F島的核電站访圃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏况脆。R本人自食惡果不足惜批糟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盛末。 院中可真熱鬧,春花似錦悄但、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鞍帝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岩臣,已是汗流浹背宵膨。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谷扣,地道東北人捎琐。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像瑞凑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子练慕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容