摘 要:本文分析了“編譯原理”作為計算機(jī)專業(yè)核心課程在計算機(jī)本科教學(xué)中的重要地位,并探討了如何把課程的難點(diǎn)用通俗、形象的方式講清楚,同時又不降低理論的掌握:如何把學(xué)生的學(xué)習(xí)積極性調(diào)動起來,變被動的學(xué)習(xí)為主動的學(xué)習(xí);以及如何使學(xué)生在這門課中得到實(shí)踐訓(xùn)練,而不是流于形式。
關(guān)鍵詞:編譯原理;教學(xué)實(shí)踐:實(shí)踐訓(xùn)練
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
文章編號:1672-5913(2007)17-0041-01
1 突破理論教學(xué)的難點(diǎn)
在教學(xué)中,我們感覺形式語言和自動機(jī)理論是“編譯原理”課程的基礎(chǔ),其內(nèi)容比較抽象,學(xué)生學(xué)起來難度大。該部分內(nèi)容既是編譯原理課程的難點(diǎn),也是讓學(xué)生接受這門課程的突破口。我們采用的教學(xué)方法是形式描述、直觀描述(包括文字和圖形)以及證明相結(jié)合。通過分析生活中熟悉的例子,找出其特點(diǎn)和規(guī)律,最后進(jìn)行抽象。
例如,什么是有窮狀態(tài)自動機(jī),一開始并不直接給出其定義。先分析某種典型的串以及程序設(shè)計語言中標(biāo)識符和整數(shù)的結(jié)構(gòu)特點(diǎn),試著把這些結(jié)構(gòu)特點(diǎn)用狀態(tài)轉(zhuǎn)換的圖形形式加以描述,最后對狀態(tài)轉(zhuǎn)換的圖形形式加以分析,抽象出其共性,以自然的方式引出有窮狀態(tài)自動機(jī)的定義。在教學(xué)中,注重強(qiáng)調(diào)一個概念、知識引入的來龍去脈,強(qiáng)調(diào)知識的總結(jié)和推演,盡可能把“為什么”的問題說清楚,而不僅僅停留在“怎樣做上”,以達(dá)到學(xué)生深入領(lǐng)會知識的目的。例如,為什么要引入有窮狀態(tài)自動機(jī),首先以實(shí)例說明正則文法在識別語言上的局限性,從而引出識別系統(tǒng),并抽象為有窮狀態(tài)自動機(jī)。
在教學(xué)中,教師既應(yīng)有豐富的知識,站在一定的高度,同時又要與學(xué)生多交流,了解學(xué)生的思維,使抽象的理論易于同學(xué)掌握。
2 面向應(yīng)用,開拓學(xué)生的視野
編譯技術(shù)作為一門成熟的理論技術(shù),不僅用于構(gòu)造編譯程序方面,還廣泛應(yīng)用于其它的領(lǐng)域。讓學(xué)生了解編譯技術(shù)在其它領(lǐng)域的應(yīng)用,不僅能使學(xué)生加深對編譯知識的理解,還可以讓學(xué)生從心理上接受這門課的重要用途。
為此我們結(jié)合Visual C++的集成開發(fā)環(huán)境(特別是調(diào)試環(huán)境),闡述VC中C++/C語句(包括函數(shù))經(jīng)VC編譯器編譯后生成的匯編語言代碼,即以具體例子給出源語言(C++/C)程序經(jīng)編譯后生成的目標(biāo)語言程序,使讀者進(jìn)一步增強(qiáng)對編譯技術(shù)的感性認(rèn)識。通過編譯原理的學(xué)習(xí),既掌握理論,又從實(shí)踐上指導(dǎo)讀者如何編寫高質(zhì)量的程序代碼,如何在程序設(shè)計中消除程序的邏輯錯誤。
在教學(xué)中,始終堅(jiān)持以高水平的科研促進(jìn)教學(xué),我們依托計算機(jī)系自然語言處理研究室的科研工作,給出編譯技術(shù)在自然語言處理、機(jī)器翻譯中的應(yīng)用實(shí)例,使學(xué)生對形式語言、有限自動機(jī)理論的理論與應(yīng)用價值有更深刻的認(rèn)識。
為了提高學(xué)生的學(xué)習(xí)積極性,擴(kuò)展優(yōu)秀學(xué)生的學(xué)習(xí)能力,并以此帶動班級同學(xué)的學(xué)習(xí),在教學(xué)中還鼓勵學(xué)生把所學(xué)的知識用于實(shí)現(xiàn)一些小的實(shí)踐題目,例如正則式用于email地址、網(wǎng)址等串的匹配問題,編譯原理在通訊協(xié)議中的應(yīng)用等。鼓勵學(xué)生查找編譯在其它領(lǐng)域應(yīng)用的文獻(xiàn),增加討論課,學(xué)生課外報告課。對于這些擴(kuò)展活動,雖然不可能要求學(xué)生在有限的時間內(nèi)做的完美,但可以促進(jìn)學(xué)生自覺地、有積極性地學(xué)習(xí),變被動學(xué)習(xí)為主動學(xué)習(xí)。更重要的是擴(kuò)展了學(xué)生的思維,為今后的深入學(xué)習(xí)和科研工作打下一定的基礎(chǔ)。
3 加強(qiáng)實(shí)踐環(huán)節(jié)的過程控制
“編譯原理”課程對實(shí)驗(yàn)環(huán)節(jié)要求很高,實(shí)驗(yàn)環(huán)節(jié)的設(shè)計將充實(shí)理論教學(xué)內(nèi)容,加深對理論的理解,培養(yǎng)學(xué)生的工程實(shí)踐能力與科研素質(zhì)。
本課程的實(shí)踐環(huán)節(jié)給出了小型編譯器的構(gòu)造方法和具體實(shí)現(xiàn)的程序樣本。本課程提供了兩個樣本語言,一個樣本語言中包含基本的程序設(shè)計語句,但不包含過程語句,也不包括變量的嵌套聲明。針對該語言,提供了詞法分析、自頂向下的遞歸子程序和自頂向上的SLR(1)語法制導(dǎo)分析方法的程序樣本,最終生成源語言的四元式中間代碼形式。第一種語言比較簡單,重點(diǎn)是讓學(xué)生把精力放在編譯器實(shí)現(xiàn)的核心部分上。另外一種語言在第一種語言的基礎(chǔ)上增加了輸入語句、輸出語句和變量的嵌套聲明。針對該語言,還提供了對中間代碼(一種抽象機(jī)代碼)的解釋運(yùn)行程序,以便給學(xué)生一個完整的概念。
在實(shí)踐環(huán)節(jié),要求學(xué)生在讀懂樣本語言的基礎(chǔ)上,根據(jù)擴(kuò)充的樣本語言的某些功能,上機(jī)加以實(shí)現(xiàn)。為了嚴(yán)格要求學(xué)生,避免作弊,需要對實(shí)踐環(huán)節(jié)進(jìn)行過程控制,其主要方法是上機(jī)抽檢、課堂答辯、提交實(shí)驗(yàn)報告和程序。
在教學(xué)中,前輩老師的寶貴教學(xué)經(jīng)驗(yàn)和豐富的教學(xué)財富、兄弟院校的教學(xué)改革經(jīng)驗(yàn)使得我們的教學(xué)不斷進(jìn)步。學(xué)習(xí)無止境,研究無止境,不斷進(jìn)取,深化教改是我們始終追求的目標(biāo)。
作者簡介:趙晶,大連理工大學(xué)計算機(jī)系