霍 歡 彭敦陸 張 艷
摘要:“編譯原理”課程是計(jì)算機(jī)科學(xué)及相關(guān)專業(yè)的一門重要專業(yè)基礎(chǔ)課程,但由于其理論抽象、算法復(fù)雜,加上目前本科學(xué)生中普遍存在的各種思想誤區(qū),教學(xué)效果不甚理想。本文針對(duì)這一現(xiàn)狀,從如何提高學(xué)生學(xué)習(xí)興趣,搞好課堂教學(xué),加強(qiáng)實(shí)踐環(huán)節(jié)等方面入手,提出了相應(yīng)的對(duì)策。
關(guān)鍵詞:編譯原理;課堂教學(xué);實(shí)踐教學(xué)
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
“編譯原理”課程是計(jì)算機(jī)專業(yè)必修的一門重要的專業(yè)基礎(chǔ)課程,也是計(jì)算機(jī)系統(tǒng)軟件中非常重要的一個(gè)分支。學(xué)習(xí)和掌握編譯程序的基本構(gòu)造原理和實(shí)現(xiàn)技術(shù),將為計(jì)算機(jī)專業(yè)學(xué)生進(jìn)一步學(xué)習(xí)、研究和工作奠定堅(jiān)實(shí)的專業(yè)理論基礎(chǔ)。但該課程內(nèi)容有一定深度和難度,涉及其他課程知識(shí)較多,學(xué)生在學(xué)習(xí)過程中感到內(nèi)容抽象、算法復(fù)雜,因此,“編譯原理”被普遍看作是計(jì)算機(jī)本科教學(xué)中既難教又難學(xué)的一門課程。這主要是因?yàn)?(1)本課建立在多門前修課程基礎(chǔ)上,并要為后續(xù)課程提供理論和實(shí)踐基礎(chǔ)。這些理論的學(xué)習(xí)有一定難度,學(xué)生要在編譯課程中融會(huì)貫通比較困難;(2)本課程涉及的算法多而復(fù)雜,學(xué)生想深刻理解算法的思想很困難;(3)學(xué)生普遍認(rèn)為學(xué)習(xí)該課程僅是為了構(gòu)造編譯程序,很難認(rèn)識(shí)到其在培養(yǎng)自己掌握科學(xué)方法和形成嚴(yán)謹(jǐn)思維方面的潛在價(jià)值,因此感覺課程枯燥,望而生畏。
針對(duì)以上情況,筆者借鑒國內(nèi)外“編譯原理”課程的教學(xué)經(jīng)驗(yàn),對(duì)如何改進(jìn)教學(xué)方法和提高教學(xué)效果做了一些研究和探索,并取得了良好的效果。
1明確教學(xué)目標(biāo),提高學(xué)生學(xué)習(xí)興趣
“編譯原理”課程專門介紹如何將高級(jí)語言翻譯為低級(jí)語言的編譯程序的工作原理和方法。不同于一般的應(yīng)用程序,編譯程序是一個(gè)十分龐大和復(fù)雜的系統(tǒng)軟件,它所包含的算法建立在高級(jí)語言或匯編語言基礎(chǔ)上,綜合運(yùn)用編譯理論及多門前修課程,如“數(shù)據(jù)結(jié)構(gòu)”、“離散數(shù)學(xué)”、“計(jì)算機(jī)組成原理”等相關(guān)知識(shí),解決高級(jí)語言在機(jī)器上運(yùn)行的實(shí)際問題。因此,這門課程也可以看作是“軟件工程”學(xué)習(xí)的一個(gè)實(shí)例。這門課程的內(nèi)容豐富,各部分內(nèi)容間具有嚴(yán)密的邏輯性,不但可以使學(xué)生真正了解計(jì)算機(jī)的工作過程,認(rèn)識(shí)計(jì)算機(jī)信息處理的實(shí)質(zhì),還可以綜合運(yùn)用所學(xué)的軟件設(shè)計(jì)技術(shù)分析解決問題,提高計(jì)算機(jī)軟件素質(zhì)。
作為系統(tǒng)軟件,編譯程序在性能上有嚴(yán)格的要求,這使得它的算法都很經(jīng)典、高效,而這些算法、思想和實(shí)現(xiàn)技術(shù)也可廣泛應(yīng)用于一般軟件的設(shè)計(jì)實(shí)現(xiàn),對(duì)提高學(xué)生元級(jí)程序的設(shè)計(jì)能力和開發(fā)大型軟件的能力是十分有益的。如正規(guī)式在XML查詢技術(shù)中的廣泛應(yīng)用、有窮自動(dòng)機(jī)在字符串查找中的運(yùn)用、必經(jīng)節(jié)點(diǎn)算法在網(wǎng)絡(luò)中的運(yùn)用、由文法來定義網(wǎng)絡(luò)協(xié)議等。教師可以鼓勵(lì)學(xué)生嘗試將編譯程序中的各種算法和技術(shù)應(yīng)用到各個(gè)領(lǐng)域,激發(fā)學(xué)生的創(chuàng)造性思維,培養(yǎng)學(xué)生的創(chuàng)新能力。
2注重理論教學(xué),開拓學(xué)生學(xué)習(xí)視野
“編譯原理”的理論性強(qiáng),內(nèi)容豐富且抽象,具有嚴(yán)密的邏輯性,應(yīng)用其他課程知識(shí)比較多。要在有限的課時(shí)內(nèi)很好地完成本課程的教學(xué),除了要注重教學(xué)的方式方法外,還要優(yōu)化教學(xué)內(nèi)容,將理論性與實(shí)踐性相結(jié)合、時(shí)代性與實(shí)用性相結(jié)合、科學(xué)性與通俗性相結(jié)合。
2.1把握聯(lián)系,啟發(fā)學(xué)生積極思維
“編譯原理”是一門綜合性很強(qiáng)的課程,它的理論教學(xué)首先要考慮、分析各門課程的內(nèi)在聯(lián)系,增強(qiáng)課程的總體效能,達(dá)到事半功倍的效果。
“編譯原理”與前修課程間的聯(lián)系如圖1所示。作為“編譯原理”課程的前修課,如程序設(shè)計(jì)語言、形式語言與自動(dòng)機(jī)、算法設(shè)計(jì)與分析等,既是編譯技術(shù)理論的基礎(chǔ),也是編譯技術(shù)的分析對(duì)象和實(shí)現(xiàn)手段。教師可以從知識(shí)體系的內(nèi)部結(jié)構(gòu)入手,將先修課程的內(nèi)容貫穿始終,并不斷強(qiáng)化和深入,以加強(qiáng)課程的系統(tǒng)性,培養(yǎng)學(xué)生的全局觀。同時(shí)還要把握編譯過程各個(gè)功能階段的內(nèi)在聯(lián)系和規(guī)律,有目的地設(shè)計(jì)問題,有意義地提出問題,通過問題把編譯原理中的理論難點(diǎn)、抽象概念引導(dǎo)出來,學(xué)生通過回答問題,從不同的角度尋求解決問題的原則、途徑和方法,加深對(duì)編譯理論和技術(shù)的理解。
2.2實(shí)例演示,形象化抽象理論
“編譯原理”的概念和定理很多,再加上大量復(fù)雜的算法,抽象程度很高,要獲得良好的教學(xué)效果,必須借助形象化教學(xué)手段,使抽象的理論具體化。
一方面,形象化教學(xué)可以通過實(shí)例類比來實(shí)現(xiàn)。例如,把編譯原理與某種高級(jí)語言(如C語言),甚至可以是自然語言(如英語)聯(lián)系起來,用課堂上學(xué)到的理論知識(shí)對(duì)該語言的語法和詞法結(jié)構(gòu)加以分析。這樣不僅可以使學(xué)生深入了解高級(jí)語言的工作原理,做到知其然更知其所以然,更能使學(xué)生切實(shí)體會(huì)到編譯原理的實(shí)用價(jià)值。如編譯原理中詞法分析的學(xué)習(xí)就可以以C語言中的實(shí)數(shù)為例,畫出能夠識(shí)別實(shí)數(shù)的狀態(tài)識(shí)別圖,并用程序?qū)崿F(xiàn)。通過這個(gè)簡(jiǎn)單實(shí)例,學(xué)生很快就能了解詞法分析在整個(gè)編譯過程中的作用。
另一方面,教師可以借助多媒體輔助教學(xué),把原理性的重點(diǎn)知識(shí)以動(dòng)畫、圖形形式呈現(xiàn)給學(xué)生,化靜為動(dòng),寓教于樂。為此我們編制了一些多媒體課件,用Flash技術(shù)生動(dòng)形象地演示抽象概念和算法,同時(shí)向?qū)W生推薦網(wǎng)上優(yōu)秀的“編譯原理”課程教學(xué)網(wǎng)站、電子書、算法等資源,拓寬學(xué)生視野,培養(yǎng)和激發(fā)學(xué)生的學(xué)習(xí)興趣。
2.3與時(shí)俱進(jìn),優(yōu)化教學(xué)內(nèi)容
編譯技術(shù)是計(jì)算機(jī)語言發(fā)展的支柱,也是計(jì)算機(jī)科學(xué)中發(fā)展最迅速、最成熟的一個(gè)分支。目前國內(nèi)“編譯原理”課程所選用的教材大多偏重于介紹程序設(shè)計(jì)語言編譯程序構(gòu)造的一般原理和基本實(shí)現(xiàn)方法、技術(shù),編譯系統(tǒng)大而復(fù)雜,編譯原理多而深?yuàn)W。很多學(xué)生學(xué)習(xí)時(shí)會(huì)受教材的局限和影響,往往花費(fèi)很大力氣去掌握復(fù)雜而深?yuàn)W的理論知識(shí),而不是實(shí)際動(dòng)手去構(gòu)造具體的小型編譯器,使理論與實(shí)踐完全脫節(jié)。因此,教學(xué)要堅(jiān)持理論和實(shí)踐相結(jié)合,課內(nèi)和課外相結(jié)合,融知識(shí)傳授、能力培養(yǎng)、素質(zhì)教育于一體。例如,主要算法、例題和習(xí)題可以以學(xué)生最熟悉的C語言為背景,將編譯程序模型的實(shí)現(xiàn)過程貫穿于各個(gè)章節(jié),讓學(xué)生閱讀理解和擴(kuò)充編譯程序,加深對(duì)所學(xué)內(nèi)容的理解。
此外,教師還要堅(jiān)持教學(xué)和科研相結(jié)合,將最新教改和科研成果引入教學(xué),將經(jīng)典編譯理論與現(xiàn)代編譯技術(shù)有機(jī)地結(jié)合起來,激發(fā)學(xué)生對(duì)編譯新技術(shù)的學(xué)習(xí)興趣。例如,程序設(shè)計(jì)語言已經(jīng)從結(jié)構(gòu)設(shè)計(jì)語言(如C語言)發(fā)展到面向?qū)ο蟪绦蛟O(shè)計(jì)語言(C++、C#),講授一些經(jīng)典的編譯理論應(yīng)用在新一代高級(jí)程序設(shè)計(jì)語言中的實(shí)例,會(huì)激發(fā)學(xué)生更大的學(xué)習(xí)熱情。同時(shí),向?qū)W生介紹編譯技術(shù)在人工智能、并行計(jì)算、自然語言處理等領(lǐng)域的具體應(yīng)用,也會(huì)為后續(xù)課程做好鋪墊,奠定堅(jiān)實(shí)的理論基礎(chǔ)。
3加強(qiáng)實(shí)踐教學(xué),激發(fā)學(xué)生主體意識(shí)
“編譯原理”是一門對(duì)實(shí)踐要求較高的課程。編譯程序以程序?yàn)椴僮鲗?duì)象,是由多個(gè)完成不同功能、執(zhí)行在不同階段的子程序組成的復(fù)雜系統(tǒng),各個(gè)階段具有不同的特點(diǎn)。即使學(xué)生理解了不同階段各個(gè)子程序的功能和特定方法,但如何銜接各個(gè)子程序,組成一個(gè)完整的編譯器,對(duì)學(xué)生來講仍可能是一件困難的事情。
基于此,本課程的實(shí)踐教學(xué)設(shè)計(jì)要充分考慮編譯理論與實(shí)際應(yīng)用的結(jié)合,突出階段性和實(shí)用性。如將編譯器的實(shí)驗(yàn)過程分為4個(gè)階段,每個(gè)實(shí)驗(yàn)階段安排在對(duì)應(yīng)階段的理論課結(jié)束時(shí)開始,實(shí)驗(yàn)以小組為單位進(jìn)行,每階段都有文檔提交和審查評(píng)分,最后將不同階段的各個(gè)子程序銜接起來,完成整個(gè)編譯器的分析設(shè)計(jì),實(shí)踐課的成績以40%計(jì)入總評(píng)成績。這樣,開發(fā)過程可以引入軟件工程的理論,注入結(jié)構(gòu)化程序設(shè)計(jì)思想,將整個(gè)系統(tǒng)模塊化,合理組織不同能力層次的學(xué)生分組開發(fā)各個(gè)功能模塊,鼓勵(lì)所有學(xué)生共同參與,相互探討,協(xié)作完成,共同提高。同時(shí),要特別加強(qiáng)實(shí)驗(yàn)中的督促環(huán)節(jié),各階段的設(shè)計(jì)實(shí)現(xiàn)要嚴(yán)格控制實(shí)現(xiàn)進(jìn)度和質(zhì)量,培養(yǎng)學(xué)生良好嚴(yán)謹(jǐn)?shù)能浖_發(fā)風(fēng)格。
4結(jié)束語
本文就如何改進(jìn)“編譯原理”課程的教學(xué)方法,提高教學(xué)效果做了一些研究和探索,從培養(yǎng)學(xué)生興趣入手,對(duì)理論教學(xué)和實(shí)踐教學(xué)中存在的問題和相應(yīng)的對(duì)策進(jìn)行了討論。實(shí)踐證明,這些方法能更好地提高學(xué)生對(duì)“編譯原理”課程學(xué)習(xí)的興趣,提高教學(xué)質(zhì)量。
參考文獻(xiàn):
[1] 張素琴. 斯坦福大學(xué)計(jì)算機(jī)科學(xué)系的編譯原理課程分析[J]. 計(jì)算機(jī)教育,2004(1):79.
[2] 黃賢英,劉貞,劉全利.“編譯原理”課程的地位及教改思路[J]. 重慶科技學(xué)院學(xué)報(bào):社會(huì)科學(xué)版,2005(3):103-105.
[3] 何炎祥,伍春香. 現(xiàn)代教學(xué)理論指導(dǎo)下的“編譯原理”教學(xué)綜合改革[J]. 計(jì)算機(jī)教育,2005(3):10-13.
[4] 劉磊,金英,王勝軍,等. 編譯原理多媒體輔助教學(xué)軟件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2002(6):54-58.
[5] 張昱,陳意云,鄭啟龍. 編譯原理課程的教學(xué)方法和教材建設(shè)[J]. 中國大學(xué)教學(xué),2005(7):61-62.
[6] 李冬梅,施?;? 編譯原理[M]. 北京:人民郵電出版社,2006.
[7] 劉磊,郭德貴.“編譯原理”課程建設(shè)研究[J]. 計(jì)算機(jī)教育,2006(6):8-10.
[8] 王一賓. 基于面向?qū)ο蟮木幾g原理實(shí)驗(yàn)的研究[J]. 安慶師范學(xué)院學(xué)報(bào):自然科學(xué)版,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