霍 歡 彭敦陸 張 艷
摘要:“編譯原理”課程是計算機科學及相關專業的一門重要專業基礎課程,但由于其理論抽象、算法復雜,加上目前本科學生中普遍存在的各種思想誤區,教學效果不甚理想。本文針對這一現狀,從如何提高學生學習興趣,搞好課堂教學,加強實踐環節等方面入手,提出了相應的對策。
關鍵詞:編譯原理;課堂教學;實踐教學
中圖分類號:G642 文獻標識碼:A
“編譯原理”課程是計算機專業必修的一門重要的專業基礎課程,也是計算機系統軟件中非常重要的一個分支。學習和掌握編譯程序的基本構造原理和實現技術,將為計算機專業學生進一步學習、研究和工作奠定堅實的專業理論基礎。但該課程內容有一定深度和難度,涉及其他課程知識較多,學生在學習過程中感到內容抽象、算法復雜,因此,“編譯原理”被普遍看作是計算機本科教學中既難教又難學的一門課程。這主要是因為:(1)本課建立在多門前修課程基礎上,并要為后續課程提供理論和實踐基礎。這些理論的學習有一定難度,學生要在編譯課程中融會貫通比較困難;(2)本課程涉及的算法多而復雜,學生想深刻理解算法的思想很困難;(3)學生普遍認為學習該課程僅是為了構造編譯程序,很難認識到其在培養自己掌握科學方法和形成嚴謹思維方面的潛在價值,因此感覺課程枯燥,望而生畏。
針對以上情況,筆者借鑒國內外“編譯原理”課程的教學經驗,對如何改進教學方法和提高教學效果做了一些研究和探索,并取得了良好的效果。
1明確教學目標,提高學生學習興趣
“編譯原理”課程專門介紹如何將高級語言翻譯為低級語言的編譯程序的工作原理和方法。不同于一般的應用程序,編譯程序是一個十分龐大和復雜的系統軟件,它所包含的算法建立在高級語言或匯編語言基礎上,綜合運用編譯理論及多門前修課程,如“數據結構”、“離散數學”、“計算機組成原理”等相關知識,解決高級語言在機器上運行的實際問題。因此,這門課程也可以看作是“軟件工程”學習的一個實例。這門課程的內容豐富,各部分內容間具有嚴密的邏輯性,不但可以使學生真正了解計算機的工作過程,認識計算機信息處理的實質,還可以綜合運用所學的軟件設計技術分析解決問題,提高計算機軟件素質。
作為系統軟件,編譯程序在性能上有嚴格的要求,這使得它的算法都很經典、高效,而這些算法、思想和實現技術也可廣泛應用于一般軟件的設計實現,對提高學生元級程序的設計能力和開發大型軟件的能力是十分有益的。如正規式在XML查詢技術中的廣泛應用、有窮自動機在字符串查找中的運用、必經節點算法在網絡中的運用、由文法來定義網絡協議等。教師可以鼓勵學生嘗試將編譯程序中的各種算法和技術應用到各個領域,激發學生的創造性思維,培養學生的創新能力。
2注重理論教學,開拓學生學習視野
“編譯原理”的理論性強,內容豐富且抽象,具有嚴密的邏輯性,應用其他課程知識比較多。要在有限的課時內很好地完成本課程的教學,除了要注重教學的方式方法外,還要優化教學內容,將理論性與實踐性相結合、時代性與實用性相結合、科學性與通俗性相結合。
2.1把握聯系,啟發學生積極思維
“編譯原理”是一門綜合性很強的課程,它的理論教學首先要考慮、分析各門課程的內在聯系,增強課程的總體效能,達到事半功倍的效果。
“編譯原理”與前修課程間的聯系如圖1所示。作為“編譯原理”課程的前修課,如程序設計語言、形式語言與自動機、算法設計與分析等,既是編譯技術理論的基礎,也是編譯技術的分析對象和實現手段。教師可以從知識體系的內部結構入手,將先修課程的內容貫穿始終,并不斷強化和深入,以加強課程的系統性,培養學生的全局觀。同時還要把握編譯過程各個功能階段的內在聯系和規律,有目的地設計問題,有意義地提出問題,通過問題把編譯原理中的理論難點、抽象概念引導出來,學生通過回答問題,從不同的角度尋求解決問題的原則、途徑和方法,加深對編譯理論和技術的理解。

2.2實例演示,形象化抽象理論
“編譯原理”的概念和定理很多,再加上大量復雜的算法,抽象程度很高,要獲得良好的教學效果,必須借助形象化教學手段,使抽象的理論具體化。
一方面,形象化教學可以通過實例類比來實現。例如,把編譯原理與某種高級語言(如C語言),甚至可以是自然語言(如英語)聯系起來,用課堂上學到的理論知識對該語言的語法和詞法結構加以分析。這樣不僅可以使學生深入了解高級語言的工作原理,做到知其然更知其所以然,更能使學生切實體會到編譯原理的實用價值。如編譯原理中詞法分析的學習就可以以C語言中的實數為例,畫出能夠識別實數的狀態識別圖,并用程序實現。通過這個簡單實例,學生很快就能了解詞法分析在整個編譯過程中的作用。
另一方面,教師可以借助多媒體輔助教學,把原理性的重點知識以動畫、圖形形式呈現給學生,化靜為動,寓教于樂。為此我們編制了一些多媒體課件,用Flash技術生動形象地演示抽象概念和算法,同時向學生推薦網上優秀的“編譯原理”課程教學網站、電子書、算法等資源,拓寬學生視野,培養和激發學生的學習興趣。
2.3與時俱進,優化教學內容
編譯技術是計算機語言發展的支柱,也是計算機科學中發展最迅速、最成熟的一個分支。目前國內“編譯原理”課程所選用的教材大多偏重于介紹程序設計語言編譯程序構造的一般原理和基本實現方法、技術,編譯系統大而復雜,編譯原理多而深奧。很多學生學習時會受教材的局限和影響,往往花費很大力氣去掌握復雜而深奧的理論知識,而不是實際動手去構造具體的小型編譯器,使理論與實踐完全脫節。因此,教學要堅持理論和實踐相結合,課內和課外相結合,融知識傳授、能力培養、素質教育于一體。例如,主要算法、例題和習題可以以學生最熟悉的C語言為背景,將編譯程序模型的實現過程貫穿于各個章節,讓學生閱讀理解和擴充編譯程序,加深對所學內容的理解。
此外,教師還要堅持教學和科研相結合,將最新教改和科研成果引入教學,將經典編譯理論與現代編譯技術有機地結合起來,激發學生對編譯新技術的學習興趣。例如,程序設計語言已經從結構設計語言(如C語言)發展到面向對象程序設計語言(C++、C#),講授一些經典的編譯理論應用在新一代高級程序設計語言中的實例,會激發學生更大的學習熱情。同時,向學生介紹編譯技術在人工智能、并行計算、自然語言處理等領域的具體應用,也會為后續課程做好鋪墊,奠定堅實的理論基礎。
3加強實踐教學,激發學生主體意識
“編譯原理”是一門對實踐要求較高的課程。編譯程序以程序為操作對象,是由多個完成不同功能、執行在不同階段的子程序組成的復雜系統,各個階段具有不同的特點。即使學生理解了不同階段各個子程序的功能和特定方法,但如何銜接各個子程序,組成一個完整的編譯器,對學生來講仍可能是一件困難的事情。
基于此,本課程的實踐教學設計要充分考慮編譯理論與實際應用的結合,突出階段性和實用性。如將編譯器的實驗過程分為4個階段,每個實驗階段安排在對應階段的理論課結束時開始,實驗以小組為單位進行,每階段都有文檔提交和審查評分,最后將不同階段的各個子程序銜接起來,完成整個編譯器的分析設計,實踐課的成績以40%計入總評成績。這樣,開發過程可以引入軟件工程的理論,注入結構化程序設計思想,將整個系統模塊化,合理組織不同能力層次的學生分組開發各個功能模塊,鼓勵所有學生共同參與,相互探討,協作完成,共同提高。同時,要特別加強實驗中的督促環節,各階段的設計實現要嚴格控制實現進度和質量,培養學生良好嚴謹的軟件開發風格。
4結束語
本文就如何改進“編譯原理”課程的教學方法,提高教學效果做了一些研究和探索,從培養學生興趣入手,對理論教學和實踐教學中存在的問題和相應的對策進行了討論。實踐證明,這些方法能更好地提高學生對“編譯原理”課程學習的興趣,提高教學質量。
參考文獻:
[1] 張素琴. 斯坦福大學計算機科學系的編譯原理課程分析[J]. 計算機教育,2004(1):79.
[2] 黃賢英,劉貞,劉全利.“編譯原理”課程的地位及教改思路[J]. 重慶科技學院學報:社會科學版,2005(3):103-105.
[3] 何炎祥,伍春香. 現代教學理論指導下的“編譯原理”教學綜合改革[J]. 計算機教育,2005(3):10-13.
[4] 劉磊,金英,王勝軍,等. 編譯原理多媒體輔助教學軟件的設計與實現[J]. 吉林大學學報:信息科學版,2002(6):54-58.
[5] 張昱,陳意云,鄭啟龍. 編譯原理課程的教學方法和教材建設[J]. 中國大學教學,2005(7):61-62.
[6] 李冬梅,施?;? 編譯原理[M]. 北京:人民郵電出版社,2006.
[7] 劉磊,郭德貴.“編譯原理”課程建設研究[J]. 計算機教育,2006(6):8-10.
[8] 王一賓. 基于面向對象的編譯原理實驗的研究[J]. 安慶師范學院學報:自然科學版,2002(11):84-85.
Researches on the Instruction of Compiling Principles
HUO Huan, PENG Dun-lu, ZHANG Yan
(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
Abstract: Compiling Principles is one of the most important fundamental courses for Computer Science and Technology. Due to the theoretic difficulties, complex algorithms of Compiling Principles and the common misunderstanding among the present undergraduates, it is difficult to get a satisfactory teaching of this course. To inspire the interests of compiling principles study, to reify the abstract theory and to effectively organize the experiments, the paper proposes some feasible measurements for the course teaching.
Key words: compiling principle; course teaching; experiments organization