freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理第2版第二章pl_0編譯程序(已修改)

2025-08-13 17:49 本頁面
 

【正文】 第 2章 PL/0編譯程序 本章目的:以 PL/0編譯程序 為實例 ,學習編譯程序?qū)崿F(xiàn)的基本步驟和相關(guān)技術(shù) 1 PL/0編譯程序的結(jié)構(gòu) 2 PL/0編譯程序的分析工作 (詞法,語法和語義)實現(xiàn) 3 PL/0編譯程序的 錯誤處理方法 4 目標代碼生成和 類 pcode代碼解釋器 1. PL/0編譯程序的結(jié)構(gòu) PL/0編譯 程序 PL/0 語言程序 類 p- code 代碼 源語言 (PL/0) 目標語言 (類 p- code) 實現(xiàn)語言( pascal/C) PL/0 類 p- code pascal/C PL/0編譯程序 類 p- code解釋 程序 類 p- code代碼 PL/0源程序 輸入數(shù)據(jù) 輸出數(shù)據(jù) PL/0編譯系統(tǒng)的結(jié)構(gòu)框架 PL/0語言 PL/0語言: PASCAL語言的 子集 PL/0程序示例 PL/0的 語法描述圖 PL/0語言 的 EBNF表示 PL/0程序示例 CONST A=10。 ( * 常量說明部分 *) VAR B,C。 ( * 變量說明部分 *) PROCEDURE P。 ( * 過程說明部分 *) VAR D。( * P的局部變量說明部分 *) PROCEDURE Q。 ( * P的局部過程說明部分 *) VAR X。 BEGIN READ(X)。 D:=X。 WHILE X0 DO CALL P。 END。 BEGIN WRITE(D)。 CALL Q。 END。 BEGIN CALL P。 END. Q過程體 p過程體 主 程序 體 輸入圓柱的半徑和高,計算一些面積、體積等 ? ? var r, h, len, a1, a2, volumn。 ? begin ? read(r)。 ? read(h)。 ? ? len := 2 * 3 * r。 ? a1 := 3 * r * r。 ? a2 := a1 + a1 + len * h。 ? volumn := a1 * h。 ? ? write(len)。 ? write(a1)。 ? write(a2)。 ? write(volumn)。 ? end. 計算最大公約數(shù) ? var m, n, r, q。 ? { 計算 m和 n的最大公約數(shù) } ? procedure gcd。 ? begin ? while r0 do ? begin ? q := m / n。 ? r := m q * n。 ? m := n。 ? n := r。 ? end ? end。 ? begin ? read(m)。 ? read(n)。 ? { 為了方便,規(guī)定 m = n } ? if m n then ? begin ? r := m。 ? m := n。 ? n := r。 ? end。 ? begin ? r:=1。 ? call gcd。 ? write(m)。 ? end。 ? end. pl/0程序 遞規(guī)調(diào)用 var n。 procedure rec。 begin if n 0 then begin write(n)。 n := n 1。 call rec。 end。 end。 begin read(n)。 call rec。 end. 計算 sum = 1! + 2 ! + ... + n!, n從控制臺讀入 ? var n, m, fact, sum。 ? { 遞規(guī)計算 fact = m! } ? procedure factorial。 ? begin ? if m 0 then ? begin ? fact := fact * m。 ? m := m 1。 ? call factorial。 ? end。 ? end。 ? begin ? { 讀入 n } ? read(n)。 ? sum := 0。 ? while n 0 do ? begin ? m := n。 ? fact := 1。 ? call factorial。 ? sum := sum + fact。 ? n := n 1。 ? end。 ? { 輸出 n !} ? write(sum)。 ? end. 程序 分程序 . 內(nèi)的文字表示 語法成分(短語) 或 內(nèi)的文字表示單詞符號 程序內(nèi)的文字表示 語法成分(短語)語法圖 const ident number = , 。 var ident , 。 。 procedure ident 。 分程序 語句 分程序 PL/0語言的 EBNF表示 構(gòu)成 EBNF的元素 — (非終結(jié)符,終結(jié)符,開始符,規(guī)則) EBNF 的元符號: 用左右尖括號括起來的內(nèi)容為 非終結(jié)符 ∷ = 讀做 ‘ 定義為 ’ ∷ =的 左部由 右部 定義 → 讀做 ‘ 定義為 ’ → 的 左部由 右部 定義 | 讀做 ‘ 或 ’ 表示右部候選內(nèi)容 { } 表示花括號內(nèi)的內(nèi)容 可重復 任意次或限 定次數(shù) [ ] 表示方括號內(nèi)的內(nèi)容為 任選項 ( ) 表示圓括號內(nèi)的內(nèi)容 優(yōu)先 例:用 EBNF描述 整數(shù) 的定義 : 整數(shù) ∷=[+| ]數(shù)字 {數(shù)字 } 數(shù)字 ∷=0|1|2|3|4|5|6|7|8|9 或 整數(shù) ∷=[+| ]非零數(shù)字 {數(shù)字 }|0 非零數(shù)字 ∷=1|2|3|4|5|6|7|8|9 數(shù)字 ∷=0| 非零數(shù)字 PL/0語言是 PASCAL語言的 子集 同 PASCAL 作用域規(guī)則(內(nèi)層 可引用包圍它的外層定義的 標識符),上下文約束, 過程可 嵌套定義 , 可遞歸調(diào)用 子集 ?數(shù)據(jù)類型 ,只有整型 ?數(shù)據(jù)結(jié)構(gòu) ,只有簡變和常數(shù) ?數(shù)字最多為 14位 ?標識符的有效長度是 10 ?語句種類 ?過程無參,最多可 嵌套 三層 目標代碼 類 pcode 目標代碼 類 pcode是 一種 棧式機 的 匯編語言 。 棧式機系統(tǒng)結(jié)構(gòu) :沒有累加器和寄存器,只有存儲棧指針 所有運算都在棧頂(零地址機) 指令格式: f l a f 功能碼 l 層次差 (標識符 引用層 減去 定義層 ) a 根據(jù)不同的指令有所區(qū)別 LIT 0 a 將常數(shù)值取到棧頂, a 為常數(shù)值 LOD l a 將變量值取到棧頂, a 為偏移量, l 為層差 STO l a 將棧頂內(nèi)容送入某變量單元中, a 為偏移量, l 為層差 CAL l a 調(diào)用過程, a 為過程地址, l 為層差 INT 0 a 在運行棧中為被調(diào)用的過程開辟 a 個單元的數(shù)據(jù)區(qū) JMP 0 a 無條件跳轉(zhuǎn)至 a 地址 JPC 0 a 條件跳轉(zhuǎn),當棧頂布爾值非真則跳轉(zhuǎn)至 a 地址,否則順序執(zhí)行 OPR 0 0 過程調(diào)用結(jié)束后 , 返回調(diào)用點并退棧 OPR 0 1 棧頂元素取反 OPR 0 2 次棧頂與棧 頂相加,退兩個棧元素,結(jié)果值進棧 OPR 0 3 次棧頂減去棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 4 次棧頂乘以棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 5 次棧頂除以棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 6 棧頂元素的奇偶判斷,結(jié)果值在棧頂 OPR 0 7 OPR 0 8 次棧頂與棧頂是否相等,退兩個棧元素,結(jié)果值進棧 OPR 0 9 次棧頂與棧頂是否不等,退兩個棧元素,結(jié)果值進棧 OPR 0 10 次棧頂是否小于棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 11 次棧頂是 否大于等于棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 12 次棧頂是否大于棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 13 次棧頂是否小于等于棧頂,退兩個棧元素,結(jié)果值進棧 OPR 0 14 棧頂值輸出至屏幕 OPR 0 15 屏幕輸出換行 OPR 0 16 從命令行讀入一個輸入置于棧頂 指 令 功 能 表 const a=10。 var b,c。 procedure p。 begin c:=b+a。 end。 begin read(b)。 while b0 do begin call p。 write(2*c)。 read(b)。 end end. ( 0) jmp 0 8 轉(zhuǎn)向 主程序入口 ( 1) jmp 0 2 轉(zhuǎn)向 過程 p入口 ( 2) int 0 3 過程 p入口 ,為過程 p開辟空間 ( 3) lod 1 3 取變量 b的值到棧頂 ( 4) lit 0 10 取常數(shù) 10到棧頂 ( 5) opr 0 2 次棧頂與棧頂相加 ( 6) sto 1 4 棧頂值送變量 c中 ( 7) opr 0 0 退棧并返回調(diào)用點 (16) ( 8) int 0 5 主程序入口開辟 5個??臻g ( 9) opr 0 16 從命令行讀入值置于棧頂 (10) sto 0 3 將棧頂值存入變量 b中 (11) lod 0 3 將變量 b的值取至棧頂 (12) lit 0 0 將常數(shù)值 0進棧 (13) opr 0 9 次棧頂與棧頂是否不等 (14) jpc 0 24 等時轉(zhuǎn) (24)( 條件不滿足轉(zhuǎn) ) (15) cal 0 2 調(diào)用過程 p (16) lit 0 2 常數(shù)值 2進棧 (17) lod 0 4 將變量 c的值取至棧頂 (18) opr 0 4 次棧頂與棧頂相乘 (2*c) (19) opr 0 14 棧頂值輸出至屏幕 (20) opr 0 15 換行 (21) opr 0 16 從命令行讀取值到棧頂 (22) sto 0 3 棧頂值送變量 b中 (23) jmp 0 11 無條件轉(zhuǎn)到循環(huán)入口 (11) (24) opr 0 0 結(jié)束退棧 PL/0編譯程序的結(jié)構(gòu) 詞法分析程序 語法語義分析程序 代碼生成程序 表格管理程序 出錯處理程序 PL/0源程序 目標程序 PL/0編譯程序的總體設計 ?以語法 、 語義分析 程序 為核心 詞法分析 程序和 代碼生成 程序都作為一個 過程 ,當語法分析需要讀單詞時就調(diào)用詞法分析程序,而當語法 、 語義分析正確,需要生成相應的目標代碼時,則調(diào)用代碼生成程序。 ?表格管理 程序?qū)崿F(xiàn) 變量 , 常量 和 過程 標識符的 信息的登錄與查找 。 ?出錯處理 程序,對詞法和語法 、 語義分析遇到的錯誤給出在源程序中 出錯的位置 和與 錯誤 性質(zhì)有關(guān) 的編號,并進行錯誤恢復。 第 2章 PL/0編譯程序 本章目的:以 PL/0編譯程序 為實例 ,學習編譯程序?qū)崿F(xiàn)的基本步驟和相關(guān)技術(shù) 1 PL/0編譯程序的結(jié)構(gòu) 2 PL/0編譯程序的分析工作 (詞法,語法和語義)實現(xiàn) 3 PL/0編譯程序的 錯誤處理方法 4 目標代碼生成和 類 pcode代碼解釋器 2 PL/0編譯程序的分析工作 (詞法,語法和語義) 識別的單詞: ?保留字或關(guān)鍵字:如: BEGIN、
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1