本提綱遵循cc-by-nc-sa協議(署名-非商業性-相同方式共享)
參考ppt:中國大學mooc-武漢理工大學-編譯原理(spoc課程)
第二章 - 文法與語言
習題第三章-詞法分析
習題第四章-自頂向下語法分析
第五章-自底向上分析法
第六章語法制導翻譯與中間**的生成
編譯程式會生成目標**,解釋程式不會生成目標**(邊解釋邊分析,解釋一句執行一句)
前三個階段屬於前段,不依賴目標機
後三個階段屬於後端,依賴目標機
重點學習中間**優化,一部分屬於前段,一部分屬於後端
遵循體系:喬姆斯基形式化定義體系
四元組:(vn-非終結符集,vt-終結符集,p-產生式集,s-文法開始符號)
具體分類:0,1,2,3型文法
如果兩個文法定義、描述的語言相同,那麼認為文法等價。
主要用於語法分析階段,特別是自頂向下語法分析中,指用產生式右部替換右部。
最左推導:堅持在當前推導步驟中,替換最左邊那個非終結符。
最右推導:堅持在當前推導步驟中,替換最右邊那個非終結符。
一般推導:在推導過程中無特定要求
直接推導:雙箭頭
一步或多步推導:箭頭上包括正閉包符號(加號)
零步或多步推導:箭頭上包括閉包符號(星號)
給定乙個文法機,如果從文法開始符號s出發,經過0步或多步推導得到乙個串a
文法二義性:對於乙個文法機,如果乙個句子/型,能找到兩個不同的最左/右推導(推導樹),那麼就有二義性
沒有程式能判斷乙個文法機的二義性
文法-語言(給語言寫文法必考):p34:2,3,8,12,13,16
推導、語法樹、文法的二義性:p34:4,6,7,8,9,11
短語、直接短語:p34:10,11
編譯的第乙個階段,對源**程式進行掃瞄(自左向右自上而下)依據相應的規則識別出單詞,並把單詞轉化為機內的統一形式token(二元組)
正規文法
正規式有窮自動機
初態:雙箭頭
終態:雙圈
由正規式,正規文法轉化成nfa,然後確定化為dfa,最後化簡dfa
p64 1、2、3、4、7
正規文法轉化為nfa
(必須是ll(1)型文法)以文法開始符號為樹根,採用自左推導的方法,自上而下為待識別符號串構建一棵語法樹
當且僅當同一終結符不同可選集兩兩不相交。
遞迴下降法
**分析法
對文法g的每個產生式a->a執行如下:
對每個a屬於select(a->a),將a->a加入m[a,a]
把所有無定義的m[a,a]標上「出錯標誌"
實現自底向上分析最常用的技術是:移進-歸約(shift-reduce)分析技術。
從所要分析的輸入串開始進行分析
從左向右掃瞄輸入串,一邊將輸入符移進分析棧內,一邊檢查位於棧頂的一串符號是否與某個產生式的右部相同,若發現相同,就替換為相應產生式的左部的非終結符(歸約);若不相同,則繼續移進輸入符。
重複上一步驟,直到歸約至文法開始符號。
其關鍵性問題是:如何識別控制代碼。
在上下文無關文法基礎上對文法增加了屬性和規則,形成了屬性文法。
在語法制導的同時進行翻譯。
武漢理工大學編譯原理 課內實驗
二 賦值語句的語法分析程式設計與實現 總結編譯原理課設驗收更水,只看結果。1.pc機 2.c 整合環境 通過設計 編制 除錯乙個具體的詞法分析程式,加深對詞法分析原理的理解,並掌握在對程式語言源程式進行掃瞄過程中將其分解為各類單詞的詞法分析方法。完成對某一種常用高階語言 如pl 0語言 的各類單詞的...
武漢理工大學C語言 課內實驗
問題描述 1.求乙個三位數的各位數字 當 n 為 152 時,分別求出 n 的個位數字 digit1 十位數字 digit2 和百位數字 digit3 的值。2.三天打魚兩天曬網 中國有句俗語 三天打魚兩天曬網 假設某人從某天起,開始 三天打魚兩天曬網 問這個人在以後的第 n 天中是 打魚 還是 曬...
武漢理工大學數值分析課內實驗
二 用c語言實現幾個求常微分方程初值問題解的程式。euler方法及其改進 龍格 庫塔 runge kutta 方法 三 用c語言實現幾個非線性方程求根的程式。二分法 迭代法 迭代過程的加速 四 用c語言實現幾個求線性方程組解的程式。gauss消去法 總結數值分析課內實驗採用程式設計的思想去實現有關數...