




摘要:根據編譯原理課程性質和特點,針對軟件外包專業和學生特點選取合適的教學內容,介紹案例教學法、類比教學法、啟發式教學法等多種教學方法在課程教學中的應用。
關鍵詞:編譯原理;案例教學;啟發式教學;類比教學
0.引言
編譯原理是計算機及相關專業的一門重要專業課程,主要介紹編譯程序構造的一般原理和基本方法,在計算機科學與課程體系中占據重要地位,其原理、方法和技術在語言處理、軟件工程、軟件自動化、逆向軟件工程、搜索引擎甚至非編譯系統等諸多技術領域有著廣泛的應用。同時又是一門理論性特別強的課程,其特點是內容多、理論性強、抽象性高、算法復雜度大、邏輯思維嚴密,學生在學習過程中對原理和方法學習起來具有一定的難度。學生普遍反映編譯原理是一門難懂難學的專業課程,而且認為畢業後也很少有從事編譯系統研發的機會,從而對該課程學習的認識上存在障礙,學習興趣和積極性不高,影響了教學效果。
青島農業大學理學與信息科學學院軟件外包專業屬于三本,雖然從2011級以後是二本招生,但分數居于二本分數線的低端。軟件外包專業雖然也屬于計算機大類,但培養目標不同,學生的基礎相對差些,在教學過程中需要根據教學對象的專業特點、基本素質、知識背景等,對課程內容進行有針對性的組合與調整,選擇合適的課堂教學方法,做到因材施教、因需施教。
1.教學內容選取
編譯原理教學內容應強調對原理和技術的宏觀理解及全局把握,針對編譯的各邏輯階段,在教學內容的選擇方面既要考慮學生的特點和專業培養目標,又要保證教學內容的完整性與連貫性,使學生對整個編譯過程及各個階段的主要方法和原理有全面的學習與了解。
軟件外包專業的學生基礎比普通本科差,且授課學時比計算機專業少,理論課時僅為32學時。因此需要適當減少教學內容,通過多舉實例、加強練習等手段確保學生對課程重點內容的掌握,刪減的部分可以安排自學。
根據軟件外包專業的培養目標、方案及本專業學生特點,選用陳火旺等編寫的《程序設計語言編譯原理》為教材,選取的教學內容見表1。
2.教學方法改革
興趣是人們力求認識某種事物或愛好某種活動的心理傾向,是推動學生學習活動的內在驅動力。要想讓學生學得好,需要不斷地激發他們的學習興趣,從而變被動學習為主動學習。在理論教學過程中,根據多年積累的教學經驗,通過靈活采用如下的多種教學方法,激發學生的學習興趣和學習積極性,提高教學效果。
2.1案例教學法
編譯原理課程很多理論既抽象又繁雜,學生理解起來比較困難,如果在講授過程中只是單純地進行理論和方法的講解,而不輔以實例,很難激發學生學習的興趣和熱情,達到理解掌握的目的。在理論教學過程中,結合具體的實例和案例使抽象的理論形象化和生動化,從而激發學生的學習興趣和熱情。
在引言部分講解編譯過程時,以一句英文(People who walk on the grass are liable to a fine)翻譯成中文的過程為例進行講解。
(1)識別出句子中的每個單詞:People,who,walk,on,the,grass,ale,liable,to,a,fine。
(2)分析句子的語法結構:定語從句。
(3)根據句子含義進行初步翻譯:在草地上行走的人易受罰款。
(4)對譯文進行修飾:易受罰款中“易受”一詞不太準確,改為“要罰款”。
(5)寫出最後的譯文:在草地上行走要罰款。
然後,將自然語言翻譯的步驟對應到程序設計語言的編譯過程5個階段,對應關系如圖1所示:
通過以上實例的運用,達到了認識整個編譯過程的目的,而且很容易被學生理解和接受,在腦海中留下比較深刻和直觀的印象,為後面深入學習各個編譯階段的理論與方法作好鋪墊。
在講解詞法分析部分,正規式與FA的等價、NFA確定化為DFA和DFA的化簡等核心內容時,可以用一道綜合題將這些內容貫穿起來。如給定字母表∑={a,b},設計一個能識別∑上所有含有相繼兩個a或者兩個b的DFA。要解決這個問題就需要根據題目要求先寫出正規式,然後將其轉換成等價的NFA,接著再確定為DFA,最後再進行化簡。這樣不僅通過一個典型案例把相關的內容綜合起來,而且能夠充分調動學生的積極性,使其在分析案例、得到結論的過程中提高綜合知識應用能力和創新能力。
2.2類比教學法
編譯原理涉及的原理與方法比較多,如此多原理與方法講授起來及學生掌握起來都比較困難。基于同類方法中有一定的相似性,在講解過程中,對同類方法進行對比講授,總結各種方法的相似之處,突出并分析每種方法的不同之處,通過類比使學生更能明確掌握各種方法的原理和適用范圍,從而在實際應用過程中能夠選擇合適的方法。
在講解三地址代碼的3種表示方法(三元式、四元式和間接三元式)時,將3種方法結合起來講解,分析其相同和不同之處。相同之處在于每種表示方法都有操作符、兩個操作數這三個域,不同之處在于臨時變量如何來保存或者引用。針對不同的保存(引用)方式,不同方法就會有不同的優缺點。如四元式要增加一個監時變量域保存計算結果,從而增加了內在開銷,但更改比較容易;而三元式通過計算臨時變量值的語句位置來引用這個臨時變量,雖然節省了內存開銷,但使得更改變得比較困難,需要修改一系列的指示器的值。通過類比方法來講解同類方法的原理,可以讓學生更加深入地理解和掌握這些方法的優缺點,能夠在實際應用過程中靈活使用這些方法。
類似地,在講解SLR分析表的構造時,與已講過的LR(O)分析表的構造進行對比講授。在構造方法中,與LR(O)相同的地方可以不用重復講解,只講解歸約(項目A->a,屬于I)的情況。對LR(O)文法,對任何終結符號都要用產生式A->a,歸約;而對于SLR文法,僅對任何屬于Follow(A)中的終結符號用產生式A->a,歸約。這樣在LR(O)分析表的構造基礎之上掌握SLR分析表的構造就比較簡單,只要掌握上面所提到的不同之處即可。
2.3啟發式教學
啟發式教學強調傳授知識的同時重視學生能力的培養及非智力因素的發展,它把學生真正置于主動者的位置,充分調動學生的積極性和主動性,激發學生的學習興趣。由于本課程理論性較強,概念原理較多,充分發揮學生的積極性就顯得尤為重要。
在授課過程中,要注重引導和培養學生自我發現問題的能力。例如講規范歸約的相關概念,句型的短語、直接短語和句柄等概念時,講解形式化的定義學生很難理解,如果不能理解即使把概念記住,遇到具體的問題時還是無從下手,很難給出正確的答案。在講授這幾個概念的同時,以一個具體的句型(aAbcde)為例,將這個句型推導過程的語法分析樹畫出來(如圖2所示),引導學生去思考這3個概念跟語法樹有什么關系及如何在語法樹中體現出來。
同時引導學生結合語法推導樹回顧推導、直接推導的概念,以及如何在語法樹中表示出來,從而引導學生去思考短語等概念的形式化描述如何用語法樹這種比較直觀的方式來解釋。經過引導後,有的學生就會發現句型的短語可以由語法樹的子樹(以S、A和B為根)的葉子結點自左至右排列得到,分別為aAbcde、Ab和d,這時教師就可以在學生對此問題有了一定的想法和見解後給出結論,一棵子樹的所有端末結點自左到右排列起來列成一個相對子樹根的短語,將每個子樹的末端結點排列起來,就得到了該句型的所有短語。經過學生思考之後,對問題的理解更加深入,同時通過積極參與到教學活動過程中,學習的積極性大大增強,課堂氣氛也更加活躍。
3.教學效果分析
2012-2013學年第一學期,筆者對軟件外包專業2010級8個班共281名學生進行編譯原理課程教學方法改革與實踐,取得了良好的教學效果。學生對該課程的學習表現出了較大的學習興趣和積極性,上課出勤情況也有了較大的改善。期末考試成績整體上有了一定的提高,不及格比例明顯減少。期末考試的成績分布情況統計見表2,各個等級人數分布統計曲線如圖3所示。
從期末考試成績分布情況表及統計曲線圖可以看出,成績在中等以上(70分以上)的人數占75%左右,不及格人數僅占3.56%,且各個等級成績分布呈現良好的正態分布,改善了編譯原理課程考試成績偏低、不及格率高的狀況。
學生對本門課程的教學比較滿意,對教師評價分數高達94.976分(滿分95);對教材評價分數為94.498分,(滿分95)。
4.結語
為提高軟件外包專業的編譯原理課程教學效果,根據專業培養目標和學生特點,我們對教學內容選取、理論教學方法進行了改革與實踐。這些方法大大地激發了學生的學習興趣,取得了良好的教學效果。