編譯技術課程設計報告書

2021-03-04 04:11:19 字數 3834 閱讀 7921

課程設計報告

( 2012 – 2013 年度第1學期)

名稱: 編譯技術課程設計

題目:l語言編譯器的設計與實現

院系: 計算機系

班級學號

學生姓名

指導教師

設計週數2 周

成績日期: 2012 年 12 月 27 日

《編譯技術》課程設計

任務書一、 目的與要求

1. 任務:實現乙個簡單的編譯程式,能夠對指定程式語言進行編譯。

2. 目的:加深對課堂講授知識的理解,熟練掌握編譯程式設計原理及常用的技術,建立編譯程式的整體概念,使得學生初步具有研究、設計、編制和除錯編譯程式的能力。

3. 要求:熟悉有關定義、概念和實現演算法,設計出程式流程框圖和資料結構,編寫出完整的源程式,進行靜態檢查,設計出輸入資料、顯示輸出資料;基本功能完善,方便易用,操作無誤;通過課程設計學會編譯程式設計與實現的常用技術,具備初步分析、設計和開發編譯程式的能力,具備分析與檢查軟體錯誤、解決和處理實驗結果的能力。

4. 學生要求人數:2人,1人負責掃瞄器和目標**生成器的設計和實現,另1人負責語法分析器和語法制導翻譯程式的設計和實現。

二、 主要內容

下面是課程設計主要內容的簡介,詳細內容請見《編譯技術課程設計指導書》。

1. 掃瞄器設計

該掃瞄器是乙個子程式,其輸入是源程式字串,每呼叫一次輸出乙個單詞符號。為了避免超前搜尋,提高執行效率,簡化掃瞄器的設計,假設程式語言中,基本字不能用作一般識別符號,如果基本字、識別符號和常數之間沒有確定的運算子或界符作間隔,則用空白作間隔。

2. 語法分析器設計

以演算法優先分析方法為例,設計乙個算符優先語法分析程式。算符優先分析屬於自下而上的分析方法,該語法分析程式的輸入是終結符號串(即單詞符號串,以乙個「#」結尾),如果輸入串是句子則輸出「yes」,否則輸出「no」和錯誤資訊。當然,也可採用**分析等方法設計語法分析器,具體方法自定。

3. 語法制導翻譯程式設計

採用語法制導翻譯方法,實現算術表示式、賦值語句和基本控制語句等的翻譯。本語法制導翻譯程式的輸入是終結符號串(即單詞符號串,以乙個「#」結尾),如果輸入符號串是句子,則按照其語義進行翻譯,輸出等價的四元式序列。

4. 目標**生成器設計

將程式語言的中間**程式翻譯為目標**程式,其輸入是四元式序列,輸出是乙個彙編**檔案。

三、 進度計畫

四、設計成果要求

1. 完成規定的課程設計任務,所設計軟體功能符合要求;

2. 完成課程設計報告,要求格式規範,內容具體而翔實,應體現自身所做的工作,注重對設計思路的歸納和對問題解決過程的總結。

五、 考核方式

1. 平時成績+驗收答辯+實驗報告;

2. 五級分制。

學生姓名:

指導教師:

2011 年 12月 12 日

詞法分析

通過設計除錯詞法分析程式,實現從源程式中分出各種單詞的方法;加深對課堂教學的理解;提高詞法分析方法的實踐能力;掌握詞法分析器作為子程式以及一遍的處理過程。

(1) 能對任何l語言源程式進行分析;

(2) 採用問答方式輸入源程式檔名,然後進行詞法分析;

(3) 分割單詞並轉換成機內表示形式,形成token檔案(單詞序列)、符號表檔案;

(4) 刪除空格等無用符號;

(5) 錯誤處理

● 給出的錯誤資訊包括:總的出錯個數,每個錯誤所在行號,錯誤編號及說明;

● 只處理以下兩種錯誤,其它可不必考慮

1. 非法字元:刪除,即,不寫入token檔案

2. 錯誤單詞

a) 包括三種形式:

i. 數字開頭的數字、字母串,如:3a56

ii. 實數中出現兩個小數點,如:3.14.15

iii. 實數的小數部分出現字母,如:5.26b78

b) 處理方式:截去後面出錯部分,使其成為乙個正確單詞(即:常數)。

如:3a56轉換為3,3.14.

15轉換為3.14,5.26b78轉換為5.

26l源程式,為文字檔案。

乙個單詞序列檔案(即:token檔案)和乙個符號表檔案,並輸出錯誤資訊。

(1) token檔案結構

typedef struct token

token;

單詞的機程式碼頁示:

(2) 符號表檔案結構

符號表用來存放l語言源程式中出現的識別符號和常數,檔案結構如下:

typedef struct symble

symble;

(1)token表生成的主要流程如下:

vt.syn為19時往symp.txt中存入整數,為20symp.txt中存入實數(小數),為-1時顯示錯誤,其他值時symp.txt中存入字串,包括關鍵字與識別符號

a.以字母開頭時,為關鍵字時st.type等於-2,為識別符號時為18

b.以數字開頭時,小數時st.type為20,整數時為19

c.為#時,st.type為0

d.其他情況均為-1

當st.type為18時往symple.txt中存入識別符號,為19時往symple.txt中存入整數,為20時往symple.txt中存入實數(小數)

(1)主程式的示意圖如下圖所示:

否返回是6.實驗結果

目標**生成

實踐目標**的生成方法。

編寫乙個目標**生成程式,將l語言的中間**程式翻譯為目標**程式(組合語言程式),如下圖:

目標機說明:

● 以8086微處理機為目標機,生成8086彙編指令

● 8086是16位微處理器,資料匯流排為16位,位址匯流排為20位,可定址1mb的空間

● 8086有8個16位通用暫存器和乙個標誌暫存器。 這8個暫存器ax-di都可以用作累加器。其中,bx和bp(基位址指標)暫存器通常用於指定資料區的基址,稱為基址暫存器,si和di大多用來表示相對基址的偏移量,稱為變址暫存器

● 8086的位址空間是分段的,每段64kb

● 簡單起見,本實驗不涉及段間定址,資料與**都放在乙個段內

● 實驗中選用以下定址功能,圓括號表示取其內容:

暫存器定址: mov ax,bx;

功能:ax←(bx)

直接定址:mov ax,data;

功能:ax←(data)

● 常用指令:

傳送指令:r表示暫存器,m表示記憶體單元

mov r, r/m r←(r/m), r/m表示r或m

mov r/m, r r/m←(r)

mov r/m, imm r/m←imm, imm是立即數

運算指令:包括add,sub,mul,div,cmp等。下面以add為例說明其用法:

add r, r/m r←(r)+(r/m)

add r/m, r/imm r/m←(r/m)+(r)或imm

cmp只影響標誌位,不影響運算元的大小

轉移指令:z是標誌位,s是符號位,o是溢位位

四元式序列檔案和符號表檔案,其結構與語法/語義分析程式的輸出一致。

乙個彙編**檔案,並無特殊資料結構。

將中間**程式(四元式序列)翻譯成匯程式設計序可按以下步驟進行:

(1) 劃分基本塊

(2) 對每個基本塊生成基本塊的目標**

為了劃分和記錄基本塊,對四元式結構作以下修改:

typedef struct genstruct

genstruct;

主要採用四個通用暫存器: ax, bx, cx, dx, 其中,ax, cx的作用固定,ax用作累加器,cx用作迴圈計數器,在四元式翻譯時直接應用不再分配。所以分配策略只用於bx與dx,具體演算法如下:

if (bx未被使用或已分配給了變數a)

else

else

}注:a為變數在符號表的入口位址。

課程設計報告書數控技術課程設計

南湖學院 課程設計報告書 題目 數控技術課程設計 系部 機械與電子工程系 專業 機械設計製造及其自動化 班級 n機自07 4f 姓名學號 2010年 5 月25 日 南湖學院 課程設計任務書 設計題目 數控技術課程設計 系部機電系 專業機械設計製造及自動化 學生姓名 黎順學號 6 起迄日期 2010...

電子技術課程設計報告書WXM

二 一四 二 一五學年第一學期 電子資訊工程系 電子技術課程設計 報告書班級 電子資訊工程班 課程名稱 電子技術課程設計 學時2 周 學生姓名 學號指導教師 二 一四年九月 1.進一步掌握數字數字電子技術課程所學的理論知識。2.熟悉cc40106 cc40192 cc4020 cc4511 cc40...

課程設計報告書

南京工程學院 課程設計說明書 設計起止時間 2015 年 6 月 29日至 2015 年 7 月 3日 目錄引言 2 1 設計任務說明 6 1.1 課題簡介 6 1.2 課程設計的目的 6 2 課程設計任務分析 6 2.1流水線產品檢測與分選結構 6 2.2流水線產品檢測與分選系統控制要求 8 2....