吉 梅,張 靜
(1.溫州醫(yī)學(xué)院 信息與工程學(xué)院,浙江 溫州 325035;2.唐山師范學(xué)院 教務(wù)處,河北 唐山 063000)
編譯原理是計(jì)算機(jī)本科專(zhuān)業(yè)的一門(mén)重要的專(zhuān)業(yè)基礎(chǔ)課。該課程所討論的原理與技術(shù),既適用于程序設(shè)計(jì)語(yǔ)言的翻譯和編譯器的構(gòu)造,也適用于其它系統(tǒng)軟件和應(yīng)用軟件的設(shè)計(jì)與實(shí)現(xiàn)?!熬幾g原理”被公認(rèn)為是計(jì)算機(jī)專(zhuān)業(yè)本科教學(xué)中最難教、最難學(xué)的課程[1],主要是因?yàn)椋海?)“編譯原理”綜合性比較強(qiáng),涉及的先修課程比較多,包括離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、匯編語(yǔ)言、程序設(shè)計(jì)等,對(duì)學(xué)習(xí)者專(zhuān)業(yè)基礎(chǔ)知識(shí)及其掌握要求都比較高;(2)“編譯原理”理論性較強(qiáng),涉及到的一些理論知識(shí)抽象深?yuàn)W、晦澀難懂,如形式語(yǔ)言與自動(dòng)機(jī)理論等。(3)“編譯原理”的實(shí)踐性較強(qiáng),一般的編譯程序都比較復(fù)雜且規(guī)模龐大,教師很難在有限的課時(shí)內(nèi)把編譯器涉及的各個(gè)細(xì)節(jié)都講透徹。
由于各個(gè)學(xué)校軟硬件基礎(chǔ)的原因,很多高校都把培養(yǎng)的重點(diǎn)放在理論教學(xué)上,實(shí)驗(yàn)課時(shí)安排得很少,有的甚至根本未開(kāi)設(shè)實(shí)驗(yàn)課。這使得學(xué)生很少有機(jī)會(huì)理論聯(lián)系實(shí)際,缺乏程序編譯的直觀感受,學(xué)習(xí)興趣不高。
由于編譯原理課程中涉及到很多的概念、定理,再加上一些復(fù)雜的算法,課程內(nèi)容顯得比較枯燥。盡管很多高校也提出了一些教學(xué)改革方案,如比喻式教學(xué)法、啟發(fā)式教學(xué)法、構(gòu)建多媒體教學(xué)環(huán)境等,在一定程度上調(diào)動(dòng)了學(xué)習(xí)的積極性,但課堂效果總的來(lái)說(shuō)還是不明顯。
大部分學(xué)校將實(shí)驗(yàn)內(nèi)容安排在詞法分析器、語(yǔ)法分析器的構(gòu)造上,而對(duì)編譯器后端語(yǔ)義分析及代碼生成部分內(nèi)容涉及較少。同時(shí),實(shí)驗(yàn)項(xiàng)目的選取一般都以孤立算法的實(shí)現(xiàn)為主,較少要求去完成一個(gè)規(guī)模型的編譯項(xiàng)目設(shè)計(jì)與現(xiàn)實(shí),直接導(dǎo)致學(xué)習(xí)者對(duì)編譯程序的總體把握不夠。
通常在編譯原理理論教學(xué)過(guò)程中并不涉及編譯器的具體實(shí)現(xiàn)[2]。由于理論知識(shí)的講解與學(xué)習(xí)都是采用自然語(yǔ)言進(jìn)行實(shí)際應(yīng)用中則要采用計(jì)算機(jī)編程語(yǔ)言來(lái)實(shí)現(xiàn),對(duì)于學(xué)生而言,從理解理論并且可以套用公式解題到能夠編程實(shí)現(xiàn)存在一個(gè)巨大的鴻溝。因此,在上機(jī)實(shí)踐時(shí)很多學(xué)生沒(méi)有思路,感到無(wú)從下手。
項(xiàng)目驅(qū)動(dòng)教學(xué)法以項(xiàng)目為核心,由教師根據(jù)各個(gè)階段的教學(xué)目標(biāo)提出項(xiàng)目設(shè)計(jì)任務(wù),針對(duì)所提出的問(wèn)題,采取演示或講解等方式,給出完成項(xiàng)目的思路和方法,逐步引導(dǎo)學(xué)生邊學(xué)邊練,并通過(guò)協(xié)同合作實(shí)踐來(lái)完成整個(gè)項(xiàng)目的目標(biāo)[3]。通過(guò)將一個(gè)具體的實(shí)踐項(xiàng)目貫穿到整個(gè)編譯原理課程的教學(xué)過(guò)程中,以具體的實(shí)例讓學(xué)生能在學(xué)習(xí)這門(mén)課程各個(gè)章節(jié)內(nèi)涵的同時(shí)逐步提高他們學(xué)習(xí)的興趣,以至最終理解并真正掌握編譯原理技術(shù)。
與傳統(tǒng)的教學(xué)方法相比,“項(xiàng)目驅(qū)動(dòng)法”能更大地激發(fā)學(xué)生的學(xué)習(xí)興趣和求知欲望[4],促使學(xué)生主動(dòng)學(xué)習(xí),充分挖掘?qū)W生的創(chuàng)造潛能,提高學(xué)生的思維能力、實(shí)踐動(dòng)手能力以及團(tuán)隊(duì)協(xié)作能力。
項(xiàng)目設(shè)計(jì)是整個(gè)項(xiàng)目驅(qū)動(dòng)教學(xué)過(guò)程的關(guān)鍵。為了讓學(xué)生能夠掌握編譯器的各個(gè)環(huán)節(jié),采用自定義的簡(jiǎn)單繪圖語(yǔ)言,以該語(yǔ)言編譯器的實(shí)現(xiàn)為項(xiàng)目貫穿整個(gè)教學(xué)過(guò)程。
在學(xué)生了解編譯程序的結(jié)構(gòu)之后,提出項(xiàng)目任務(wù),演示、講解完成項(xiàng)目的思路和方法,讓學(xué)生對(duì)整個(gè)項(xiàng)目有一個(gè)總體、初步的認(rèn)識(shí)。
在運(yùn)用多媒體教學(xué)手段、比喻式教學(xué)、啟發(fā)式教學(xué)外,將項(xiàng)目的具體實(shí)現(xiàn)引入課堂。在理論教學(xué)的同時(shí),適當(dāng)介紹算法的具體實(shí)現(xiàn)以避免理論與實(shí)踐的脫節(jié)。例如,在講解詞法分析的同時(shí),介紹該繪圖語(yǔ)言詞法分析器的設(shè)計(jì)與實(shí)現(xiàn)。該繪圖語(yǔ)言分為關(guān)鍵字、常量、標(biāo)識(shí)符、界符和其他五類(lèi)單詞,各單詞的詞法規(guī)則如下:
(1)關(guān)鍵字。該語(yǔ)言只有 For、Next、Point、Line、Circle和Scale幾個(gè)有限的關(guān)鍵字。其中For-Next用于循環(huán)語(yǔ)句;Point、Line和Circle用于繪制圖形的方法;Scale用于定制圖形的坐標(biāo)系統(tǒng)。
(2)標(biāo)識(shí)符:以英文字母開(kāi)頭的字母數(shù)字串。
(3)常量:非零開(kāi)頭的正整數(shù),用來(lái)表示圖形的坐標(biāo)。
(4)界符:如分號(hào)、小括號(hào)等。
(5)其他:如空格、注釋?zhuān)ㄖС諮ava單行注釋?zhuān)┑取?/p>
在給出詞法規(guī)則后,將語(yǔ)言的詞法規(guī)則用正規(guī)式的形式描述單詞,并利用 ANTLR構(gòu)造該詞法分析程序,然后對(duì)ANTLR自動(dòng)構(gòu)造的詞法分析程序進(jìn)行分析和測(cè)試,從而使學(xué)生理解整個(gè)詞法分析過(guò)程。其ANTLR描述如圖1所示。
圖1 繪圖語(yǔ)言詞法規(guī)則的ANTLR描述
為了讓學(xué)生能夠整體把握編譯技術(shù),將項(xiàng)目分成不同的模塊,每個(gè)模塊都是一個(gè)獨(dú)立的插件。在每一個(gè)階段的練習(xí)中,我們將提供其它模塊的代碼,讓學(xué)生立即看到運(yùn)行效果,同時(shí)產(chǎn)生成就感,從而提高他們的編程興趣。
在整個(gè)教學(xué)過(guò)程中,可以將知識(shí)點(diǎn)分解到不同的學(xué)習(xí)階段并形成不同的模塊,分別交給不同的學(xué)生組合去具體負(fù)責(zé)相應(yīng)的模塊實(shí)現(xiàn),使學(xué)生都能夠切實(shí)感受到知識(shí)應(yīng)用的效果,使之加深理解,并以此來(lái)提高學(xué)習(xí)者的興趣。
對(duì)于基礎(chǔ)差、確實(shí)無(wú)力完成實(shí)驗(yàn)要求的學(xué)生,提供標(biāo)準(zhǔn)代碼,要求能夠看懂,能夠講解就給達(dá)標(biāo)。
通過(guò)分析編譯原理課程的特征、教學(xué)中存在的問(wèn)題,提出了項(xiàng)目驅(qū)動(dòng)教學(xué)法在編譯原理課程教學(xué)中的應(yīng)用。