編譯原理三——語義分析

語義分析和中間代碼生成

1、概述

1畦贸、和語法分析、詞法分析的同時進(jìn)行進(jìn)行詞法檢查、語法檢查一樣薄坏,語義分析也伴隨語義檢查趋厉。

  1. 動態(tài)語義檢查需要生成相應(yīng)的目標(biāo)代碼,它是在運(yùn)行時進(jìn)行的胶坠。
  2. 靜態(tài)語義檢查是在編譯時完成的君账,主要涉及類型檢查(與參與運(yùn)算的操作數(shù)類型相容)、控制流檢查(保證控制語句有合法的轉(zhuǎn)向點(diǎn))沈善、一致性檢查(如圖標(biāo)識符在同作用域只說明一次乡数,case語句標(biāo)號不能同等)(語義是上下文有關(guān)的,故形式化困難闻牡,目前用屬性文法和語法制導(dǎo)翻譯)

2净赴、語法制導(dǎo)翻譯:為每個產(chǎn)生式配上一個翻譯子程序,并在語法分析同時執(zhí)行這些子程序罩润。

  • 自底向上語法制導(dǎo)翻譯:(規(guī)約時調(diào)用翻譯子程序玖翅,每個產(chǎn)生式語義子程序執(zhí)行之后,某些結(jié)果必須作為產(chǎn)生式左部符號語義值暫時保存下來)割以,原LR分析棧擴(kuò)充一項(xiàng)為語義值烧栋。
  • 可以輕易畫出語法樹,但是語義分析和計(jì)算過程不太會

2拳球、屬性文法

1、文法符號的屬性:(可以根據(jù)語法樹找珍特,注意復(fù)習(xí)

  • 繼承屬性 :從上向下傳遞祝峻,由父節(jié)點(diǎn)屬性計(jì)算得到,由根節(jié)點(diǎn)到分支子結(jié)點(diǎn)扎筒,反映對上下文依賴的特性莱找。(方便地表示程序上下文結(jié)構(gòu)關(guān)系)
  • 綜合屬性 :自底向下傳遞,由子節(jié)點(diǎn)屬性計(jì)算得到嗜桌,傳遞方向與綜合屬性相反奥溺。

3、常見的中間語言

1骨宠、抽象語法樹

  • 葉節(jié)點(diǎn)表示諸如常量或變量這樣的運(yùn)算對象浮定,其它內(nèi)部節(jié)點(diǎn)表示運(yùn)算符
  • 語法規(guī)則中非本質(zhì)部分去掉,得到抽象語法規(guī)則层亿,舉例如下桦卒。


    yfs.jpg

2、逆波蘭表示法

  • 表達(dá)式的逆波蘭表示:書106


    nbl.jpg
  • 程序語句的逆波蘭表示:

    1. 賦值語句:x=a+b*c 逆波蘭:xabc*+= (左部匿又,表達(dá)式方灾,=)
    2. GOTO語句:GOTO<語句標(biāo)號> <語句標(biāo)號>BL
    3. 條件語句:<順序號>BR表示無條件轉(zhuǎn)移到BR,BT和BF則是條件e真或假轉(zhuǎn)移到順序號。<布爾表達(dá)式e的逆波蘭式><順序號>BT
    4. 循環(huán)語句:轉(zhuǎn)換為條件語句

    練習(xí):
    pracnbl.jpg

3裕偿、 三地址代碼:三地址代碼是中間代碼的一種抽象形式洞慎。通常有四元式、三元式和間接三元式三種表示方法嘿棘。(三地址代碼通常包含三個地址劲腿,兩個存運(yùn)算對象,一個存運(yùn)算結(jié)果)

  • 四元式:(op,arg1,arg2,result),op是運(yùn)算符蔫巩,arg和result是指針谆棱,可以空缺,單變量只用arg1圆仔。

常用:


四元式.jpg
  • 三元式:(op,arg1,arg2)沒有結(jié)果地址垃瞧,三元式標(biāo)號代表結(jié)果地址
  • 間接三元式:只記錄不同的三元式,運(yùn)算順序用間接碼表表示

舉例:
三元式.jpg

4坪郭、表達(dá)式及賦值語句的翻譯

  • 為了實(shí)現(xiàn)由表達(dá)式到四元式的翻譯个从,需要給文法加上語義子程序,以便在規(guī)約的同時執(zhí)行對應(yīng)的語義子程序歪沃,語義子程序所涉及的語義變量嗦锐、語義函數(shù)說明如下:
    1. 非終結(jié)符E.place表示存放E值的變量名在符號表中的入口地址或臨時變量名的整數(shù)碼。
    2. 語義函數(shù)newtemp()沪曙,調(diào)用后回送一個代表新臨時變量的整數(shù)碼奕污,臨時變量名按順序可設(shè)為T1、T2......
    3. emit(op液走,arg1碳默,arg2,result)產(chǎn)生四元式并填入四元式表中缘眶。
    4. 定義lookup(i.name)是審查i.name是否出現(xiàn)在符號表中嘱根,是返回i.name在符號表中的入口指針,否則返回NULL

一套語義翻譯:
ytyyfx0.jpg

ytyyfx1.jpg
ytyyfy2.jpg

注意語義棧與規(guī)約同步巷懈,狀態(tài)棧轉(zhuǎn)換斜對角法


ytyyfy3.jpg

最后再進(jìn)行手寫演算
  • 布爾表達(dá)式的翻譯
    1. 布爾表達(dá)式一般由運(yùn)算符與運(yùn)算對象組成该抒,運(yùn)算符為布爾運(yùn)算符,(非顶燕,與凑保,或)。運(yùn)算對象也可以為布爾變量割岛,也可為常量或關(guān)系表達(dá)式愉适。關(guān)系表達(dá)式的運(yùn)算對象為算術(shù)表達(dá)式
    2. 確定一個表達(dá)式的真假出口:
    3. 例子:
      布爾表達(dá)式四元式.jpg
    4. 自己試試:
      自己嘗試.jpg
    5. 嘗試?yán)斫猓?div id="5v7jvht" class="image-package">
      819759651.jpg

控制語句的翻譯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市癣漆,隨后出現(xiàn)的幾起案子维咸,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癌蓖,死亡現(xiàn)場離奇詭異瞬哼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)租副,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門坐慰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人用僧,你說我怎么就攤上這事结胀。” “怎么了责循?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵糟港,是天一觀的道長。 經(jīng)常有香客問我院仿,道長秸抚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任歹垫,我火速辦了婚禮剥汤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘排惨。我一直安慰自己吭敢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布暮芭。 她就那樣靜靜地躺著省有,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谴麦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天伸头,我揣著相機(jī)與錄音匾效,去河邊找鬼。 笑死恤磷,一個胖子當(dāng)著我的面吹牛面哼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扫步,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魔策,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了河胎?” 一聲冷哼從身側(cè)響起闯袒,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后政敢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體其徙,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年喷户,在試婚紗的時候發(fā)現(xiàn)自己被綠了唾那。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡褪尝,死狀恐怖闹获,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情河哑,我是刑警寧澤避诽,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站灾馒,受9級特大地震影響茎用,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜睬罗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一轨功、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧容达,春花似錦古涧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至算芯,卻和暖如春柒昏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熙揍。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工职祷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人届囚。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓有梆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親意系。 傳聞我的和親對象是個殘疾皇子泥耀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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