國內外編譯原理課程實踐教學現狀分析

《自己動手寫編譯器、鏈接器》

馮向萍 

(新疆農業大學計算機與信息工程學院)  

摘 要:本文主要從教材的選擇,實踐項目的設置以及實踐課程佔總評成績的比例等方面分析和比較了國內外多所高校編譯原理課程實踐教學的基本情況和特點。根據我院編譯原理課程開設的實際情況,提出相應的對策,實現對我院計算機科學與技術專業編譯原理課程實踐項目的科學,合理設置,以提高學生的動手能力,鍛鍊學生的邏輯思維能力。

     關鍵詞: 課程  實踐教學  現狀

“編譯原理”課程是計算機專業必修的一門重要的專業基礎課程,也是計算機系統軟件中非常重要的一個分支。在衆多的原理性學習課程中,編譯原理主要承擔了語言實現原理、方法和技術的介紹。但該課程內容有一定深度和難度,且綜合性比較強,涉及的先修課程比較多,包括離散數學、程序設計、數據結構、彙編語言、操作系統等,對學生專業知識掌握情況也要求比較高,學生在學習過程中感到內容抽象、算法複雜,是一門公認比較難學、比較難教的課程。同時,計算機學科是一門對實踐性要求比較高的學科,很多東西不能認爲聽懂看懂就是理解、掌握,需要編程去實現才能說是真正理解、掌握。因此,在考慮如何使學生學好“編譯原理”課程理論知識時,如何把理論和實踐結合起來,促進和激發學生的學習興趣,鍛鍊學生用計算機解決問題的能力和邏輯思維能力,是編譯原理教學的一個主要而且極其重要的問題。本文主要對國內外編譯原理課程的實踐教學現狀進行了分析,希望從中找到適合我院學生編譯原理實踐課程的教學方法。

    一、 國外高校編譯原理課程實踐教學情況

   (一) 斯坦福大學

斯坦福大學(Stanford University)的編譯課程分爲兩個階段,課程代碼分別爲CS143和CS147,CS143主要針對在Windows平臺下開發編譯器的本科生教學,CS147主要針對有一定編譯理論和Unix環境下編程經驗的的研究生。我們在此主要分析CS143課程。斯坦福大學編譯課程的主要參考資料爲兩本,一本是《Principles, Tools, andTechniques, Second Edition》,這本書被讀者稱爲編譯理論知識講解的“龍書”,主要注重編譯理論的詳細講解。另一本書爲《Parsing Techniques:A Practical Guide,Second Edition》,側重點在於分析研究編譯中各種語法分析實現的各種算法和理論技術,並從中找到解決每一個問題的最優的方法。

CS143編譯課程學時爲46學時,其中期中考試佔2學時,討論14學時,即課堂教學學時爲30學時。

課程實驗內容主要由詞法分析(使用 Flex)、語法分析(使用 Bison)、語義分析和綜合實驗四部分組成,根據實驗的難度不同,在實驗成績中所佔的比例也不同,前面四個實驗分別佔實驗總成績的 50 分、60 分、125 分和 125 分。整個實驗部分佔編譯課程總評的 70%。實驗在課程的不同階段發佈,要求學生定時提交。課程組織主要由一名授課教師和若干名助教組成,方便學生答疑。

   (二) 卡內基梅隆大學

卡內基梅隆大學(Carnegie MellonUniversity)在編譯技術領域享有很高的國際聲譽,該校的編譯課程使用的主要參考教材是被業界稱爲“虎書”的《Modern CompilerImplementation in ML》。編譯實踐內容基於一個特定語言L1設置,題目共有 5 道:①擴展給定的 L1 語言的編譯器,使之能夠將源代碼轉換成真實的X86 彙編代碼;②實現支持 L2 語言的完整編譯器;③實現支持 L3 語言的完整編譯器;④實現另一個支持 L3 語言並生成安全代碼的完整編譯器;⑤兩者選其一,實現 L3編譯器的各種代碼優化或者實現 L3 的垃圾收集器,以上五個作業在實驗成績中佔相同的比重。

卡內基梅隆大學編譯課程實驗分數佔編譯課程總評成績的 70%,其餘的30%是書面作業成績。課程的組織由一名主講教師和若干名助教組成。卡內基梅隆大學編譯課程的監督措施也很到位,每次作業的發放時間和提交時間都固定,超過預定時間兩天未交者成績按0分計,對於晚交作業的學生也有相應的懲罰措施。程序代碼的相似性都有專門的工具檢查。

   (三) 加州大學伯克利分校

加州大學伯克利分校(University of California, Berkeley)的編譯課程編號爲CS164,課程名稱爲《Programming Languagesand Compilers》,該校指定了三本參考教材,分別是稱之爲的“龍書”的《Compilers:Principles, Techniques, and Tools》,《Thinking in C++》和《Python Essential Reference (3rd edition)》。課程的組織方式主要由課堂講課,討論,學生完成書面作業和獨立完成實驗四部分組成。

該校編譯課程的實驗要求是使用C++語言實現 Python 語言(version 2.5)的編譯器,課程成績的評定主要由期中考試,期末考試,書面作業和實踐四部分組成,其中期中考試和期末考試兩次考試佔總成績的25%,實踐部分佔總成績的55%,書面作業佔總評成績的20%。

   (四)華盛頓大學

華盛頓大學(Washington University)編譯課程的名稱是《Introduction to Compiler Construction》,使用的參考教材是《Engineering a Compiler 》、《Modern Compiler Implementation in Java》、《Engineering a Compiler》(Cooper & Torczon)。課程實驗項目是將一個用 Java 寫的簡單編譯器完善成一個支持MiniJava(Java 語言子集)的功能完整的編譯器。課程成績的評定主要由實踐項目40%,書面作業15%,期中考試15%,期末考試25%四部分組成。

    二、國內高校編譯原理課程實踐教學情況

   (一) 國防科學技術大學

國防科學技術大學的編譯課程總學時爲54學時,其中講授48學時,課內上機6學時,學分3分。使用的教材是陳火旺院士領銜編著、國內高校廣泛使用的《程序設計語言編譯原理》,參考教材指定的是稱之爲“龍書”的《CompilersPrinciples,Techniques and Tools》。該校實驗課程設置了兩個實驗:①以PL語言(結構化語言的子集)爲背景,實習編譯程序的構造方法②瞭解編譯程序構造工具Lex、Yacc 和 JavaCC 的使用。實驗成績佔總評成績的 20%。

   (二)武漢大學

武漢大學的編譯課程是國家級精品課程,課程總學時爲90學時,期中課堂講授爲54學時,實驗爲36學時,學分爲3學分。武漢大學使用的教材是自編的教材《編譯原理》(何炎祥編著),參考書指定的是《Complier ConstructionPrinciples and Practice》。課程實驗的安排有兩種方式:第一種是先在課堂上舉出一個完整的小語言編譯程序實現的例子,要求學生讀懂編譯程序實現的代碼和算法,在此基礎上,將該語言進行擴充,然後將擴充後的語言作爲實習內容,要求學生完成擴充部分的程序。第二種方式是提供程序框架,簡單部分直接提供源代碼,關鍵模塊的代碼空缺,要求學生在掌握程序算法,讀懂程序的情況下完成關鍵模塊的代碼編寫。

   (三)清華大學

清華大學的編譯課程教材選用的是呂映芝等自行編寫的《編譯原理》教材,參考書爲:(美)勞頓著,馮博琴等譯的《編譯原理及實踐》。清華大學編譯原理課程的教學學時爲48學時,實驗由兩部分組成,第一部分爲課堂實驗內容,第二部分爲期末的課程設計。課堂實驗內容充分體現了對學生個人能力的尊重。該部分的實驗題目有三個,由學生根據自己的能力自選,三個題目難度從低到高,分數所佔總評的比例分別是 30%、50%和 20%。作爲課程設計,清華的編譯原理課程教學的理念是避免傳統教育中存在的“種基礎,輕實踐”,現在的觀念是要求學生“學中練,練中學;練中闖,練中創”的觀念。考慮到JAVA在全球軟件開發中佔據將近20%份額的現狀,要求學生使用現有的詞法器和語法器自動生成工具(如Jlex、CUP)實現一個JAVA編譯器。

   (四)吉林大學

吉林大學的編譯原理課程是教育部—微軟精品課程,教材是自行編寫的《編譯程序構造原理和實現技術》(金成植著)。課程總教學學時爲72學時,實驗課學時爲32學時。該校專門開設了獨立的編譯原理實踐課程,共包含8 個實驗:詞法分析程序開發、遞歸下降分析法、LL(1)語法分析、符號表管理、語義分析、中間代碼生成、中間代碼優化和目標代碼生成。

    三、 國內外大學編譯原理實踐課程特點分析

   (一)國外大學

總體來看,國外高校的編譯課程非常重視實驗,實驗內容量大且要求高,涉及到了編譯程序的每個階段以及面嚮對象語言編譯器實現、代碼優化等高級內容。對於學生完成的標準,作業提交的時間等要求都很高,學生提交的實驗作業須保證學生自己完成,嚴禁抄襲。另外,課程通常除有一名主講教師外,會根據上課學生的人數配備一定數量的助教,及時解答學生疑問,協助教師檢查實驗作業。

   (二)國內大學

相比較國外大學實驗多,要求嚴的特點,國內高校編譯原理實踐課程的設置主要有以下幾個特點:

    1、授課學時方面

對於和實踐教學配套的理論教學來說,國內大學理論教學的學時普遍高於實踐學時,教師課堂授課內容較多,較細,而且幾乎沒有討論學時。

2、實踐成績占課程總評成績的比例

在實踐課程的監督上,普遍缺少對學生實驗環節的督促。對於實踐成績在總評成績所佔的比例而言,國內大學的實踐成績普遍都控制在20%左右,很少有超過30%,而期末考試成績佔分比例較大,基本都達到70%,這就容易導致學生重理論,輕實踐的情況發生,也會使學生失去動手實踐的興趣。

    3、實踐內容和方式

相比較國外大學要求學生必須完成一個較爲完整的編譯系統,國內大學對實踐內容的安排上,主要分成以下三種情況:

  (1)多次小實驗設置方式

在進行理論課教學的同時,爲了加深學生對相關內容的理解,在相應的實踐課內安排多次小型實驗,分別支持編譯程序的詞法分析,語法分析,語義分析及中間代碼的優化以及目標代碼的生成等階段。這種安排的優點是實驗進度一般和理論授課的進度同步,學生可以通過每一部分的實驗加強對課堂學習知識的理解,能夠掌握編譯的有關技術,而且這種實驗難度相對較低,也激發學生學習的積極性和主動性。但這種方法的缺點是人爲的分裂了編譯程序的完整性,因此學生不能學習到一個完整的編譯器的開發運行過程。

  (2)綜合實驗設置方式

考慮到第一種情況的缺陷,有些高校的編譯原理實驗內容是由教師先設計一

種簡單的語言,然後要求學生針對這種語言設計和實現一個相對完整、獨立的編譯器。或者考慮到學生的實際情況,在進行編譯原理的實踐時,要求學生對現有的編譯程序進行研習,對語言進行擴充,然後在修改相應的編譯器,達到對編譯程序實踐的效果。這種方式實驗課程的難度是根據語言規模的不同以及學生擴充程度的不同而有差別,彈性較大,有利於加強學生對編譯程序的整體認識,且可以做到因材施教,能充分鍛鍊每一個學生解決問題的能力和編程能力。

  (3)編譯工具實踐方式

第三種情況是對某一特定的語言,藉助 Flex (或Lex)和 Bison(Yacc) 等

自動工具,直接生成詞法分析程序和語法分析程序,然後組裝成完整的編譯程序。這種方式的實踐,要求學生必須花費大量的時間研究開發工具的基本原理及使用方法,通過學習,學生對編譯程序前端的理論知識有一很好的學習和提高過程,但對編程能力的提高不多。

    四、我校編譯原理實踐課程開設的探索

通過比較和分析國內外大學計算機專業編譯原理實踐課程開設的優缺點,針對我院學生的特點,對於編譯原理實踐課程,擬做以下嘗試:

   (一)課程組織方式的改革

借鑑國外大學主講教師配備助教制的教學模式,在理論授課和課內實驗以及課程設計中,主講教師配備一定數量的助教,由助教協助主講教師一起完成實驗課程的順利進行,隨時解決學生存在的問題。

   (二)減少課堂授課內容,增加課外討論內容

從以上的分析可以看出,國外著名高校編譯原理課程的課堂教學學時都較少,更多的時間留給學生進行自學和完成實踐作業。因此,在學校人才培養方案學時有限的情況下,減少編譯原理課程理論教學的學時,課堂授課內容適當減少,增加學生的課外閱讀內容,是一個解決課堂教學和實踐教學學時衝突的有效可行的方法。當然,在將課內教學內容轉移到課外自學中時,增加必要的監督措施是督促學生課外閱讀和提高閱讀質量的前提條件。因此,在教學的實施過程中,對學生進行分組,借鑑國外教學和研究生教學中討論的授課方式,在課外在主講教師的佈置和助教的監督下組織學生對閱讀內容進行討論,並將每次討論的成績作爲期末評分的依據。

   (三) 實踐課程的改革

 爲了提高學生的動手能力和鍛鍊學生的邏輯思維能力,將編譯原理的實踐課程分爲兩部分:

    1、課內實驗

主要根據編譯程序的詞法分析,語法分析,語義分析和中間代碼生成及代碼優化和目標代碼的生成過程,分成幾個小實驗,在計劃內學時完成,需要16學時左右。

    2、課程設計

要求學生在課內小實驗的基礎上,在Unix或Windows平臺下完成完整的編譯器。時間爲課程結束後一個禮拜。完成一種自定義語言的完整的編譯器。時間爲課程結束後一個禮拜內完成。

    (四)實踐課程考覈細則

    1、課程的實踐成績佔總成績的50%,其中課內實驗佔30%,課程設計佔20%。

    2、實踐成績評定方法

實驗成績的評定主要從操作過程是否正確、結果是否正確、工作量、質量、是否及時完成、實驗報告質量等多方面進行考覈,根據最終實驗完成情況以及實驗過程的表現進行評分,在評分中主要考慮以下各項指標,各項指標的評定標準爲:

l  程序的正確性(60%):包括所完成的設計思路是否清晰,算法是否正確,數據結構的選擇是否適當等方面評價。

l  實驗報告(20%):包括報告的完成情況及質量、報告結構是否符合要求,功能算法描述是否清晰完整、各種圖例結構是否正確等。

l  程序分格(10%):所寫程序是否有註釋,變量名起名是否符合規則等。

l  創新性(10%):完成設計是否有新意或者創意,對於常見系統設計是否具有獨到之處。

l  有無抄襲現象:如果發現有抄襲現象,相關人員本次實驗成績均爲零分。

l  是否按時交:在提交時間每向後拖一天,扣兩分。

    五 結束語

總之,在編譯原理實踐課程的設置中,根據學生水平層次和培養目標的不同,通過對國內外大學編譯實踐課程設置的比較,找到最優的,最適合我院學生的編譯實踐教學方案,最大限度的培養學生的邏輯思維能力、編程和綜合應用能力。

參考文獻:

[1] 斯坦福大學編譯課程網站.[2012-11-21]:http://www.stanford.edu/class/cs143/.

[2] 卡內基梅隆大學編譯課程網站[2012-11-21]:

http://www.cs.cmu.edu/~fp/courses/15411-f08/index.html

[3 ]加州大學伯克利分校.編譯課程網站[2012-11-21]:http://inst.eecs.berkeley.edu/~cs164/fa12/

[4] 華盛頓大學編譯課程網站[2012-11-21]:http://www.cs.washington.edu/education/courses/cse401/11au/

[5] 國防科學技術大學. 編譯原理精品課程網站. [2012-11-21]:http://eol.ctbu.edu.cn/resource/data/jpk/2007139.htm.

[6] 武漢大學編譯原理精品課程教學網站[2012-11-21]:http://cs.whu.edu.cn/cs2011/jpkc_Cons.php?id=774

[7] 吉林大學編譯原理精品課網[2012-11-21]:http://www.jlu-softlab.cn/education/compiler.

 

 

基金項目:新疆農業大學教學研究項目“編譯原理課程實驗項目研究與實踐”(201033)

作者簡介:馮向萍,女,副教授,在讀博士,主要從事編譯原理課程的教學和相關的科研工作。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章