教科书系统程式-系统软体实作.PPT

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教科书系统程式-系统软体实作

程式碼產生器的資料結構與函數 程式碼產生器 GenCode() – 開頭 GenCode() – 處理 FOR GenCode() – 處理 STMT GenCode() – 處理 COND GenCode() – 處理 EXP GenCode() – 結尾 輸出中間碼 P-Code P-Code 轉為組合語言 (前半段) P-Code 轉為組合語言 (後半段) 輸出組合語言 12.6 整合測試 單一主程式, 以條件編譯的方式 編譯出 test, c0c, as0, vm0 等四個執行檔 方法是利用 C 語言的巨集編譯指令 #if … #elif…#endif 整個系統的主程式 (前半段) 整個系統的主程式 (後半段) 專案建置檔 makefile (第1部分) 專案建置檔 makefile (第2部分) 專案建置檔 makefile (第3部分) 建置執行過程 (1) 執行:編譯器 (剖析) 執行:編譯器 (中間碼產生) 執行:編譯器 (產生組合語言) 執行:組譯器 (第1階段:計算符號位址) 執行:組譯器 (第2階段:指令轉機器碼) 執行:組譯器 (輸出:目的碼) 執行:虛擬機 結語 系統軟體實作 本章以 C 語言實作了 動態陣列 雜湊表 編譯器 c0c test.c0 test.asm0 組譯器 as0 test.asm0 test.obj0 虛擬機 vm0 test.obj0 習題 12.1 請撰寫一個 C0 語言的程式 fib.c0, 可以利用 for 迴圈的方式算出費氏序列中的 f(10) 的值, 費氏序列的規則為 f(n) = f(n-1)+f(n-2), 而且 f(0) = 1, f(1)=1。 12.2 請利用 c0c 編譯器, 將 fib.c0 編譯為組合語言 fib.asm0。 12.3 請利用 as0 組譯器, 將 fib.asm0 組譯為目的檔 fib.obj0。 12.4 請利用 vm0 虛擬機, 執行 fib.obj0, 並檢查看看 f(10) 的結果是否正確。 12.5 請為 C0 語言加上 if 條件的規則為 IF = ‘if’ ‘(’ COND ‘)’ BLOCK (‘ elseif’ BLOCK)* (else BLOCK)?, 然後修改本章的剖析器程式, 加入可以處理該規則的程式。 12.6 繼續前一題, 請修改本章的程式碼產生器程式, 以產生上述的 if 規則之程式。 虛擬機的執行 vm0 ArraySum.obj0 執行後的傾印 虛擬機的資料結構與函數 虛擬機的最上層函數 – runObjFile(objFile) 虛擬機使用的位元操作函數 定義暫存器別名 虛擬機的主要函數 – Cpu0Run() Cpu0Run() - 指令擷取階段 Cpu0Run() – 解碼階段 Cpu0Run() – 執行階段 (載入指令) Cpu0Run() – 執行階段 (運算指令) Cpu0Run() – 執行階段 (跳躍指令) Cpu0Run() – 執行階段 (結尾) 虛擬機:傾印暫存器 - Cpu0Dump() 12.4 剖析器實作 C0 語言的剖析器 (Parser) 是編譯器與直譯器中的關鍵程式 作為 c0c 編譯器的語法剖析程式 會呼叫詞彙掃描器 Scanner 取的詞彙 掃描器 詞彙掃描器 Scanner 是一個較為簡單的物件 用來取得下一個詞彙 (token) 提供剖析器呼叫使用 掃描器的使用方法 掃描器的資料結構 判斷詞彙的型態 – tokenToType(token) 掃描器的主要函數 剖析器 Parser.h 剖析器的資料結構與函數宣告 Parser.c 剖析器的程式實作 剖析器的資料結構與函數 剖析器的最上層函數 parse() 遞迴下降剖析法 剖析 for 迴圈語法 剖析器中的 next() 函數 剖析器中的 push(), pop() 函數 圖 12.1 遞迴下降剖析器的執行過程 PROG BaseList PROG BaseList BASE STMT 成 長 方 向 堆疊 (Stack) BASE STMT i : id = 0:number EXP ITEM EXP ITEM FOR FOR ( for BASE … 12.5 編譯器實作 c0c 編譯器 輸入:C0 語法的程式 輸出:CPU0 的組合語言 執行方法 c0c c0File asmFile 編譯的範例 編譯器的最上層函數 範例 12.24 的 compile(cFile, asmFile) 剖析器:parse(cText) 程式產生器: generate(parser-tree, asmFile) 程式碼產生器的最上層函數 系統程式 –

文档评论(0)

ailuojue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档