官术网_书友最值得收藏!

前言

本書是在教育部計算機領域本科教育教學改革試點工作計劃(簡稱“101計劃”)“編譯原理”課程組的組織下編寫的理論教材之一。與其他同類理論教材相比,本書在介紹編譯理論和方法的同時,更強調實踐技術,并注重編譯理論與實踐的結合。在內容方面,本書的理論部分涵蓋了當前主流編譯器編譯過程中的核心技術要點,實踐部分則引導學生基于理論知識構建一個能夠將以類C語言編寫的源程序編譯為MIPS目標語言代碼的完整編譯器。在教學中,教師能夠參考本書完整地進行理論教學和實踐指導,其內容已經包括了相關資料。

一方面,當前許多“編譯原理”課程理論教材以傳授理論知識為主,其中的內容離編譯器具體實踐尚有一定的距離。這可能使學生偏重學習理論和方法,而對編譯器實現缺乏更為深刻的理解。另一方面,常規的“編譯原理”實踐課程大多基于一門相對簡易的編程語言,要求學生實現支持該語言語法和語義處理部分的編譯器。由于缺乏規范化的實踐指導,有時會降低教學要求,不得不允許學生“靈活”(較為隨意)地實現編譯器的功能;又或者由于教學要求過高,學生在無實踐指導的情況下對編譯器實現無法下手,而對課程產生較大的抵觸心理。針對這些問題,本書面向開設計算機學科的大專院校,提供一門接近實際C語言的C--語言,從理論方法的解說到實踐指導的進行,引導性地講解理論知識和編譯器的具體實現,并提供充分的測試樣例來驗證編譯器實現的正確性。

整體而言,基于本書介紹的理論方法和實踐技術,我們設計了相應的實踐內容,系統性地覆蓋理論方法和實踐技術部分的各個知識點。本書的實踐內容具有四個特點:一是接近實際,所采用的語言是C--語言,該語言接近現實中常用的C語言,這使得所設計與實現的編譯器更為實用,甚至在特定領域可以直接或經過少量修改后使用;二是結合相關的實踐技術進行介紹,引導學生完成一個完整編譯器的設計與實現,不會使學生出現面對編譯器實現要求無從下手或不得不求助于第三方額外資料的情況;三是具備相關的實現驗證幫助,我們提供了充分的測試樣例來幫助驗證編譯器實現的正確性,而無須自行設計測試用例;四是難度可調,我們提供了實踐內容的多種執行方案,既可以統一難度要求,也可以區分必做內容和選做內容,還可以采用學生分組方案,使得每個組隊實現不同的功能組合,激發學生的思考創新能力,并鍛煉其合作能力。

下面我們就本書的使用方式、時間安排以及質量控制給出一些建議。

使用方式

本書包含五個核心章(從第2章至第6章),前后貫穿,分別為詞法分析和語法分析、語義分析、中間代碼生成、目標代碼生成以及中間代碼優化。每章的理論和實踐內容依賴于前續章,教學需按順序進行。

在這五章中,除了第5章之外,其他章節的實踐內容均分為必做部分和選做部分,而選做部分則進一步分為幾種不同的要求(第5章僅有必做部分)。這五章中的實踐內容特別考慮了不同院校的教學要求以及學生之間的能力差異,因而可以采用多種方式教學:

1. 對所有學生要求相同:這是最簡單的使用方式,適用于學習編譯原理的所有學生都需要通過相同考核要求的情況。具體而言,可進一步劃分為下面三種情況:

(1)對所有學生要求最低:完成所有實踐的必做部分,即可獲得滿分。

(2)對所有學生要求最高:完成所有實踐的必做部分和選做部分,才可獲得滿分。

(3)對所有學生要求自選:完成所有實踐的必做部分,即可得滿分。但若能額外完成實踐的選做部分,則可視完成的情況獲得額外獎勵。

2. 對不同學生要求不同:這種使用方式適用于學習編譯原理的學生需要通過不同考核要求的情況。比如強化班和普通班的學生一起上編譯原理課程,則要求強化班學生完成所有實踐的必做部分和選做部分才可獲得滿分,而普通班學生完成所有實踐的必做部分即可得滿分,但若能額外完成實踐的選做部分,則可獲得額外獎勵。

3. 對不同組隊要求不同:這是最復雜的使用方式,適用于允許學生自由組隊以共同完成實踐要求的情況。推薦的組隊規模是一至三人,比如,若雙人組隊則為正常模式,可獲得實踐滿分,若三人組隊則為互助模式,需適當減少實踐總分(如變為原來滿分的90%),若單人組隊則為高手模式,可適當提高實踐總分(如變為原來滿分的110%)。在實踐要求方面,仍可考慮不同的考核要求而組合不同的必做和選做部分,或者完成指定或隨機選擇的實踐要求。比如,一位強化班學生需要完成所有實踐的必做部分和選做部分才可獲得滿分,他可以單人組隊進入高手模式以獲得更高的總分,也可以雙人組隊進入正常模式,以減少實踐難度。

時間安排

本書從第2章至第6章是核心教學內容,一個學期完成教學,預計時長17周,每周2~3課時。各章的內容應依順序進行教學,每完成前一章中理論方法和實踐技術部分的教學即可開始后一章中對應部分的教學。實踐內容部分作為課程項目布置,可略晚開始,比如,第2章的實踐內容可從第2周開始布置,以保證前期進行了必要的理論方法和實踐技術的講授和準備,而后續章節的實踐內容可與教學同步進行。一般而言,如果一個學期時長17周,建議第1章和第2章的教學內容在第1~5周內完成,第3章的教學內容在第6~9周內完成,第4章的教學內容在第10~12周內完成,第5章和第6章的教學內容在第13~17周內完成,其中第5章的理論教學在第13周和第14周內完成,第6章的理論教學內容在第15~17周內完成。下圖展示了一個教學計劃的安排示例。

教學安排計劃甘特圖

需要說明的是,第5章和第6章實踐內容的輸入均是中間代碼。在我們完成了第5章的實踐內容之后,基本上就實現了從C--源程序到MIPS目標程序的整個編譯過程。我們設計第6章實踐內容的目的是引導學生完成中間代碼的優化,讓編譯器生成更為高效的目標代碼。因此,第6章的實踐內容相對于其他章節較為獨立,可以根據教學和實踐情況進行取舍。對于學有余力的學生,建議將第4章實踐內容輸出的中間代碼,輸入至第6章實踐內容構建的中間代碼優化模塊中完成優化之后,再輸入至第5章構建的中間代碼到目標代碼的翻譯器內,完成整個編譯過程。基于此,我們建議從第2周開始第2章詞法和語法分析的實踐內容,在第5周末結束這部分實踐內容并開始第3章語義分析的實踐內容,在第9周末結束語義分析的實踐內容并開始第4章中間代碼生成的實踐內容,在第12周末結束中間代碼生成的實踐內容并同時開始第5章目標代碼生成和第6章中間代碼優化的實踐內容。在第17周末結束時完成第5章和第6章的實踐內容,內部可以自由分配兩者的時間,最終實現整個編譯器。如果一個學期的教學時長更短或更長,可做相應微調,比如,在學時更短的情況下,可以適當提前第2章實踐內容的結束時間(由四周變為三周)。

如果由于教學上的特殊安排或其他原因,導致本書的理論方法和實踐技術教學落后于實踐內容的安排,也可以推遲部分實踐內容的結束時間并同時保證后續實踐內容的開始時間來形成更為緊湊的安排。比如,若第2章的理論方法和實踐技術教學無法在第5周完成,那么可以允許第2章的實踐內容推遲一周結束(即在第6周結束),但第3章的實踐內容仍保持在第5周開始(即兩者重疊一周時間)。這樣既可以幫助部分學生更好地完成第2章的實踐內容,也可以允許其余學生正常地開始第3章的實踐內容。

質量控制

編譯原理課程實踐的質量控制旨在鼓勵學生在完成實踐內容的過程中增強學習興趣,提高所實現編譯器的質量,以及抑制不良行為(如抄襲代碼)的發生。本書的實踐內容設計也正有這方面的考慮。

1. 提高實踐質量:本書從測試用例方面來提高實踐內容的質量。

本書的實踐內容部分提供了大量測試樣例來幫助學生自檢編譯器的實現是否符合實踐要求,在教學中也可引入更多的測試用例(可根據實踐內容的要求和已有的測試樣例推導)來進一步測試學生所實現的編譯器的質量,這將促使學生考慮更多的細節來更好地實現編譯器。對于教師,我們也可提供更多的測試用例。

2. 抑制不良行為:本書從分組實踐和克隆檢測兩方面來抑制不良行為。

(1)分組實踐:本書的實踐內容設計了必做部分和選做部分,而選做部分又分為不同的要求,它們之間相互獨立。在允許學生自由組隊來協作完成實踐內容的情況下,可進行必做部分和選做部分的隨機組合。比如,根據抽簽隨機決定一組學生必須完成第2章實踐內容的必做部分和選做部分的要求2.1,而另一組學生必須完成必做部分和選做部分的要求2.2,以此類推,后續章節的實踐內容也可隨機組合。如此可以增強不同組隊間所完成內容的差異性,增大抄襲的難度。也可以進一步要求不允許完成其他組隊的實踐要求,這樣也可以抑制不同組隊之間的抄襲行為(可以通過測試用例的執行結果區別出是否完成了不允許的實踐要求)。但要注意這種做法將與前述使用方式中的“對所有學生要求自選”的情況相抵觸。

(2)克隆檢測:本書的實踐內容設計也允許在不同的學生代碼之間進行克隆檢測,特別是在分組實踐的情況下,學生提交的代碼不會完全類似(因為需要實現不同的要求)。為避免代碼復制后經過簡單變量名和函數名替換后重新提交為新的代碼,建議采用基于可執行代碼的二進制級克隆檢測,并加以源碼人工比對確認。采用必要的克隆檢測可以進一步抑制學生抄襲代碼的行為。

整體而言,本書強調從理論和實踐兩個方面指導與幫助學生深刻理解編譯器的工作原理。其中,理論方法的教學使學生能夠理解編譯器運行過程中的核心算法,而實踐技術則可幫助學生掌握理論方法及算法在代碼實現層面的設計與編碼要點,最后結合實踐內容對理論方法與實踐技術進行鞏固。同時,本書在設計過程中加入了不同難度的實驗要求,教師可以針對實際教學需求,選擇不同的教學內容進行授課。

另外,采用本書作為教材的教師可登錄https://g.cmptt.com/8ewcx,注冊后加入本書數字教研室,下載教輔和相關教學資源、進行教學交流等。

如果在閱讀本書的過程中發現謬誤,也請各位讀者不吝賜教!

主站蜘蛛池模板: 伊金霍洛旗| 呈贡县| 抚宁县| 稻城县| 中西区| 鄄城县| 麦盖提县| 酒泉市| 正蓝旗| 西丰县| 安福县| 安吉县| 宁德市| 邵东县| 三穗县| 麦盖提县| 韩城市| 沾益县| 武冈市| 桦甸市| 玉屏| 英超| 伽师县| 南雄市| 金湖县| 无锡市| 台湾省| 清丰县| 锡林郭勒盟| 五峰| 怀远县| 江山市| 萨嘎县| 穆棱市| 阳江市| 阳泉市| 宁明县| 简阳市| 拜城县| 漾濞| 天气|