编译原理课件.pptxVIP

  • 3
  • 0
  • 约3.97万字
  • 约 495页
  • 2023-11-16 发布于山东
  • 举报
第一章 編譯概述;語言處理與編譯程序;語言處理與編譯程序;語言處理與編譯程序;語言處理與編譯程序;語言處理與編譯程序;語言處理與編譯程序;編譯程序概貌;;以賦值語句 pos:=init+rate*60 為例來瞭解編譯的全過程 詞法分析 (Lexical Analysis) 功能: a) 掃描根源程式的字串,識別出意義獨立的最小的詞 法單位——單詞(Token)。 b) 刪除注解、空格、回車及與輸入介質有關的符號。 c) 報告詞法錯誤。 如上述賦值語句經過詞法分析後輸出為如下單詞: (ID,pos) (OP,:=) (ID,init) (OP,+) (ID,rate) (OP,*) (CONST,60) ;語法分析 (Syntax Analysis) 功能:對輸入的單詞串,按程式設計語言的語法規則,檢查根源程式句法正確性。 例如某語言關於賦值語句的語法規則是: 賦值語句是:ID:=EXP ID、CONST是EXP 若EXP1和EXP2是EXP,則EXP1+EXP2、 EXP1*EXP2、 (EXP1)是EXP。 可以通過自頂向下或自底向上的句法分析方法,建立分析樹(又稱 句法樹、推導樹)進行句法分析。 ;對此例,分析樹為:;語義分析 (Semantic Analysis) 功能:檢查語義的正確性,完成語義解釋及必要的轉換。 例如:此例中各變數的數據類型是float,由於rate與60的類型不同就應該進行轉換,即將60轉換為60.0。 中間代碼生成 (Intermediate Code Generation) 功能:將單詞串轉換為等價的中間代碼串。 常見的中間代碼 有:四元組、三元組、 逆波蘭(尾碼)表示等。 上例中的賦值語句可翻譯為(四元組形式): (float, ,60,t1) (*,ID.rate,t1,t2) (+,ID.init,t2,t3) (:=,t3, ,ID.pos) 其中t1,t2,t3是臨時變數、ID.x是x在符號表中的位置。 ;代碼優化 (Code Optimization) 功能:以提高目標代碼運行的時/空間效率為目的 的對中間代碼進行等價變換。 常見的方法有:刪除無用賦值和多餘運算、常量合併、運算強度削弱、代碼外提、複寫傳播等等。 此例中的中間代碼通過優化可為: (*,ID.rate,60.0,t1) (+,ID.init,t1,t2) (:=,t2, ,ID.pos) 代碼生成 (Code Generation) 功能:將中間代碼串轉換為彙編代碼或機器指令。 ;代碼生成;出錯處理 (Error Handle) 功能:顯示出錯的位置、性質,限制出錯的影響,為盡可能多地發現錯誤做些恢復工作?? 符號表管理 (Symbol-Table Management) 功能:管理根源程式中各種數據對象及其各種屬性,提供包括生成、查詢、更新等各種功能。 ;編譯程序的生成方法;1.3.3 其他編譯模式 前面討論的編譯模式稱為“完全編譯”。 其他編譯模式有: 互動式編譯——允許通過交互方式處理根源程式中的錯誤,及時改錯。允許部分或逐步測試。 增量編譯——允許在修改了部分程式結構後僅對該修改部分重新編譯,而不一定對整個程式進行編譯。 問題:如何實現?;第二章 文法與語言的基本知識;基本概念;符號與符號串;符號與符號串;2.2.2 符號串的運算 符號串x中的元素的個數稱為符號串x的長度,記以|x|。 設z=xy是字母表V上的符號串,則x是符號串z的頭(或符號串z的首碼),而y是符號串z的尾(或符號串z的尾碼)。 若|x|=1,則x是符號串z的頭符號。同樣,若|y|=1,則y是符號串z的尾符號。 注意,空串?是任何一個符號串的頭和尾。 當y≠ ? 稱x是z的真首碼。當x≠ ? 稱y是z的真尾碼。 並置(連接)是一種運算,滿足結合律,但不滿足交換律。;例2:字母表?1={0,1} ?,0,1,00,11,10,01,……是?1上的符號串 如x=1001 y=010 則連接xy=1001010 yx=0101001 都是?1上的符號串 |x|=4 |y|=3 ?,1,10,100,1001都是x的頭,1是x的頭符號 ?,1,01,001,1001都是x的尾,1是x的尾符號 ?,1,10,100,1001都是x的首碼, ?,1,10,100 是真首碼 1001,001,01,1, ?都是x的尾碼, 001,01,1,? 是真尾碼;定義3:設A,B是二個符號串集合,定義: A∩B={a|a∈A且a∈B} A∪B={a|a∈A或者a∈B} A0={?} An=AAn-1 (n0) A*= A0∪ A1∪A2∪…∪An ∪

文档评论(0)

1亿VIP精品文档

相关文档