编译原理课件.pptxVIP

  • 1
  • 0
  • 约4.89万字
  • 约 704页
  • 2023-11-16 发布于山东
  • 举报
;§1.1 什麼是編譯程序;二、基本概念 把用組合語言或高級語言寫成的程式轉換成機器語言的程式,被稱為翻譯程式。 組合語言的翻譯程式稱為組合語言程式 把高級語言的翻譯程式稱為編譯程序。 編譯程序的輸入對象稱為根源程式,輸出對象稱為目標程式。;三、編譯過程 1、執行一個高級程式一般分為兩步: ① 通過編譯程序把根源程式翻譯成機器語言程式。 ② 執行目標程式;編譯過程:;編譯方式:;2、也可以採用邊翻譯邊執行的解釋執行方式,這種處理程式稱為解釋程式。解釋程式的結果是根源程式的執行結果。; 採用這種方法的優勢:可移植性。發佈的程式理論上可以在任何硬體平臺上運行。即C#通過安裝在機子上的CLR(Common Language Runtime-公共語言運行時),Java通過安裝在機子上的JVM(Java Virtual Machine-Java虛擬機)來執行中間代碼和位元組碼。; 簡單的理解是,為了實現這種移植性,在機子上又加了一層平臺(CLR、JVM),讓中間代碼在這個平臺上進行運行,而JVM、CLR在不同的操作系統上以不同的方式實現。 ;§1.2 編譯程序的組成; 表 格 管 理 ;例子:用Pascal將英語句子譯成數字,用1~26替A~Z,空格用#,句號不變。例如:this is an example;Begin Read(letter); While letterTermin do Begin If letter=blank Then Write(well:2) Else Begin code:=Ord(letter)-Ord(A)+1;; Write(code:3) End Read(letter) End Write(termin) End;二、編譯的步驟 1、分析單詞:保留字、識別字、常數、運算符、分界符 2、語法分析:分析語法結構和程式層次 ;(input, output);Well=‘#‘;語句部分;3、語義處理和產生目標程式 ① 程式處理 ② 說明語句處理 ③ 可執行語句處理;詞法分析;1、前後端結合;A編譯程序前端 B編譯程序前端;2、結論: ① 分前後端可提高效率,減少重複勞動 ② 利於優化,便於組合;1、編譯程序按其掃描遍數分為: 一遍掃描 多遍掃描;根源程式 →詞法分析程式; 目前大部分編譯程序都是多遍掃描的。 一遍掃描:以語法分析為主。;§1.4 編譯程序的開發 ;2、編譯程序的自動化 利用自展技術完成。 首先利用組合語言的編寫???簡單的編譯程序,例如加法的編譯程序。 將乘法轉換為加法,利用得到的加法編譯程序得到乘法的編譯程序,以此類推。 PL0……PLn均是PASCAL的子集。;;2.1 PL/0語言描述 2.2 PL/0編譯程序的結構 2.3 PL/0編譯程序的語法語義分析 2.4 PL/0編譯程序的錯誤處理 2.5 類pcode代碼解釋器 本章目的:以PL/0為實例,學習編譯程序實現的基本步驟和相關技術 ; PL/0編譯程序;;PL/0語言; PL/0程式示例;程式;分程式;語句;條件;;1、EBNF表示的符號說明 :是非終結符 →:左部由右部定義 | :表示‘或’ { }:表示為可以重複部分 [ ]:表示為任選項 ( ):表示成分優先;2、PL/0 語言文法的EBNF表示為: 程式→分程式● 分程式→[常量說明部分][變數說明部分][過程說明部分]語句 常量說明部分→CONST常量定義 {,常量定義} 常量定義→識別字=無符號整數 無符號整數→數字{數字} 變數說明部分→VAR識別字{,識別字} ; 識別字→字母{字母|數字} 過程說明部分→過程首部分程式{;過程說明部分} 過程首部→procedure識別字 語句→賦值語句|條件語句|當型迴圈語句|過程調用語句|讀語句|寫語句|複合語句|空 賦值語句→識別字:=運算式 複合語句→begin語句{;語句}end; 條件→運算式關係運算符運算式|odd運算式 運算式→[+|—]項{加法運算符項} 項→因數{乘法運算符因數} 因數→識別字|無符號整數| ‘(’ 運算式‘)’ 加法運算符→ + | - 乘法運算符→ * | / 關係運算符→!= | | ≤| ≥| | = ; 條件語句→ If條件then語句 過程調用語句→ Call識別字 當型迴圈語句→While條件DO語句 讀語句→Read’(’識別字

文档评论(0)

1亿VIP精品文档

相关文档