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