付立平+趙彩虹
摘要: 本文針對編譯原理課程在教學(xué)過程中存在的問題,提出了“因材施教,注重實(shí)驗(yàn)”的改革理念,并以編譯原理課程設(shè)計為依托進(jìn)行了深入的探討與實(shí)踐。在介紹課程設(shè)計內(nèi)容和評分標(biāo)準(zhǔn)的基礎(chǔ)上,詳細(xì)討論了按編譯過程模塊劃分實(shí)驗(yàn)內(nèi)容的創(chuàng)新性的評分標(biāo)準(zhǔn),使學(xué)生在實(shí)驗(yàn)過程中更好地理解編譯系統(tǒng)的理論知識,更容易將小型編譯器的系統(tǒng)實(shí)現(xiàn)。
關(guān)鍵詞:詞法分析;語法分析;四元式;匯編語言;編譯器
編譯原理課程是計算機(jī)專業(yè)中一門重要的專業(yè)理論課,是一門理論性和實(shí)踐性都很強(qiáng)的課程 。編譯原理課程是專門介紹如何將高級語言翻譯成低級語言的編譯程序的工作原理與方法的課程 。編譯原理作為一門比較難理解的課程,一直作為計算機(jī)科學(xué)與技術(shù)專業(yè)的必修課程,因?yàn)樽鳛槌薪佑嬎銠C(jī)硬件與軟件的關(guān)鍵技術(shù),對編譯原理課程的學(xué)習(xí)可以使學(xué)生加深對計算機(jī)的理解。因此,進(jìn)一步深入探討編譯原理課程教學(xué)改革和實(shí)踐方法是非常有意義的。
一、編譯原理教學(xué)中存在的問題
(一)教學(xué)內(nèi)容理論性太強(qiáng)
課程中涉及許多理論知識,如形式語言與自動機(jī)、文法、語法制導(dǎo)等理論,這些理論抽象不好理解,學(xué)生學(xué)習(xí)過程中有很大的難度。編譯原理課程的重點(diǎn)是詞法分析和語法分析,這兩個部分的學(xué)習(xí)主要以理論為主。在教學(xué)過程中,對大量編譯理論進(jìn)行教學(xué),會使學(xué)生產(chǎn)生錯覺,認(rèn)為編譯是一門理論課的學(xué)習(xí),會做題就能學(xué)好編譯。這個錯誤的認(rèn)識往往使很多學(xué)生忽略了編譯實(shí)踐性的重要性,這對課程的學(xué)習(xí)是非常不利的。課程中涉及到的LL(1),LR(1)等算法思想復(fù)雜,學(xué)生雖然學(xué)習(xí)過數(shù)據(jù)結(jié)構(gòu)的一些算法,但對于編譯課程中的算法還是感到難理解、難實(shí)現(xiàn),這種情況給后續(xù)實(shí)驗(yàn)帶來一定的困擾。
(二)實(shí)驗(yàn)內(nèi)容抽象
大部分編譯原理教材中,對小型編譯器這個實(shí)踐環(huán)節(jié)都是用PL/0語言進(jìn)行描述的。PL/0語言具有結(jié)構(gòu)清晰、功能簡單、可讀性強(qiáng)的特點(diǎn),是計算機(jī)高級語言的模擬語言。學(xué)生沒有實(shí)際接觸過PL/0語言,對用其描述的編譯原理實(shí)驗(yàn)內(nèi)容雖然容易理解,但和實(shí)驗(yàn)內(nèi)容所選的編程語言是脫節(jié)的,不利于學(xué)生上機(jī)實(shí)現(xiàn)。
(三)實(shí)驗(yàn)內(nèi)容缺乏實(shí)踐性
許多編譯原理課程的實(shí)驗(yàn)內(nèi)容是對現(xiàn)有編譯器進(jìn)行改進(jìn),這樣的實(shí)驗(yàn)內(nèi)容不能使學(xué)生充分理解編譯器的原理,使學(xué)生對編譯原理的學(xué)習(xí)停留在表面理論上,無法理解其精髓和內(nèi)核理論。
二、教學(xué)改革措施
(一)因材施教,注重實(shí)驗(yàn)教學(xué)
在實(shí)際教學(xué)過程中,對不同專業(yè)、不同水平的學(xué)生可以采用不同的難易度教學(xué)。軟件工程專業(yè)和計算機(jī)科學(xué)技術(shù)專業(yè)的學(xué)生相比,就可以降低難度,注重實(shí)驗(yàn)過程。這樣,就達(dá)到了因材施教,使學(xué)生在實(shí)驗(yàn)過程中加深對理論的理解。
為解決上述教學(xué)內(nèi)容中的問題,本著本科教育以培養(yǎng)實(shí)用技術(shù)人才為主的主導(dǎo)思想,堅持理論與實(shí)踐緊密結(jié)合的原則,將編譯原理的實(shí)驗(yàn)教學(xué)與課堂教學(xué)內(nèi)容、教學(xué)模式、教學(xué)方法等多方面進(jìn)行結(jié)合,創(chuàng)新性地提出了以課程設(shè)計為依托的教學(xué)改革措施。
在充分研究制定編譯原理課程教學(xué)大綱及實(shí)驗(yàn)大綱的基礎(chǔ)上,制定了大型綜合實(shí)驗(yàn)的考核方案和實(shí)驗(yàn)講義。提出了在計算機(jī)上做作業(yè)的理念,讓學(xué)生在學(xué)習(xí)理論的同時,親自上機(jī)將理論付諸實(shí)踐。從而有力地改善了高等教育理論與實(shí)踐嚴(yán)重脫節(jié)的情況,全面提高學(xué)生利用所學(xué)理論解決實(shí)際問題的能力、實(shí)際動手能力以及創(chuàng)新精神。使得學(xué)生將所學(xué)理論知識和實(shí)際應(yīng)用相結(jié)合,讓理論、應(yīng)用與實(shí)踐能夠相輔相承。編譯原理課程設(shè)計的開展,是教學(xué)改革的迫切需要,是全面提高學(xué)生素質(zhì)和培養(yǎng)創(chuàng)新人才的需要。
(二)課程設(shè)計的主要內(nèi)容
為配合編譯原理課程的教學(xué),培養(yǎng)學(xué)生的實(shí)際工作能力,加深對課堂教學(xué)內(nèi)容的理解,通過設(shè)計一個小型編譯器,使學(xué)生更深刻地領(lǐng)會其基本概念、基本工作原理和實(shí)現(xiàn)方法,從而具有初步開發(fā)系統(tǒng)軟件和應(yīng)用軟件的實(shí)際能力。
編譯器是將一種語言翻譯為另一種語言的計算機(jī)程序。一個現(xiàn)代編譯器的主要工作流程:源代碼(source code) → 預(yù)處理器 (preprocessor) → 編譯器 (compiler) → 匯編程序 (assembler) → 目標(biāo)代碼 (object code) → 鏈接器 (Linker) → 可執(zhí)行程序 (executables)。編譯器的設(shè)計,深入地探討了編譯器設(shè)計方面的重要主題,包括詞法分析、語法分析、語法制導(dǎo)定義和語法制導(dǎo)翻譯、運(yùn)行時刻環(huán)境、目標(biāo)代碼生成、代碼優(yōu)化技術(shù)、并行性檢測以及過程間分析技術(shù),并強(qiáng)調(diào)編譯技術(shù)在軟件設(shè)計和開發(fā)中的廣泛應(yīng)用。主要由語言基礎(chǔ)知識、詞法分析、語法分析、中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成、符號表的構(gòu)造和運(yùn)行時存儲空間的組織等部分組成。
具體內(nèi)容和要求如下:
1.掌握某種語言源程序的結(jié)構(gòu)及構(gòu)成規(guī)則。
2.掌握形式語言與自動機(jī)的概念,能構(gòu)造識別相應(yīng)符號串的自動機(jī)。
3.掌握編譯程序的詞法分析程序的構(gòu)造。
4.掌握語法分析技術(shù),構(gòu)造相應(yīng)的語法分析程序。
5.掌握語法制導(dǎo)生成中間語言的算法。
6.掌握編譯程序的代碼生成程序。
學(xué)生在對PL/0語言某一掃描的分析程序或主程序進(jìn)行修改或擴(kuò)充時,保存完整的源程序正本,只須在相應(yīng)源文件副本上進(jìn)行修改。然后再重新對修改的程序進(jìn)行編譯,得到新的源文件和新的可執(zhí)行文件,并用來編譯用戶編制的含有增加或修改成分的新源程序。學(xué)生在詞法分析階段、語法分析階段、語義分析及代碼生成階段均要進(jìn)行上機(jī)實(shí)踐,達(dá)到學(xué)以致用的目的。
(三)實(shí)驗(yàn)考核標(biāo)準(zhǔn)
編譯原理課程設(shè)計共有8個實(shí)驗(yàn)教學(xué)項目,學(xué)生完成所有實(shí)驗(yàn)項目,就設(shè)計并實(shí)現(xiàn)了一個小型編譯器系統(tǒng)。
實(shí)驗(yàn)一: PL/O源程序結(jié)構(gòu)及構(gòu)成規(guī)則,要求學(xué)生用高級語言編寫程序建立和訪問正文文件,并用PL/O語言編寫程序,擴(kuò)充規(guī)則。
實(shí)驗(yàn)二:構(gòu)造識別符號串的自動機(jī),要求學(xué)生用高級語言實(shí)現(xiàn),分別編寫識別各類單詞的程序。
實(shí)驗(yàn)三:詞法分析程序的構(gòu)造,要求以PL/O編譯程序?yàn)闃颖?,改編其總控程序和詞法分析程序,使其能對擴(kuò)充后的PL/O語言進(jìn)行詞法分析。
實(shí)驗(yàn)四:語法分析程序的構(gòu)造,用高級語言編寫程序,使其能對算術(shù)表達(dá)式進(jìn)行LL(1)、算符優(yōu)先的語法分析。
實(shí)驗(yàn)五:掌握語法制導(dǎo)生成中間語言的算法,用高級語言編寫程序,使其能將任意表達(dá)式翻譯成逆波蘭式,并用語法制導(dǎo)的方法生成表達(dá)式的四元式序列。
實(shí)驗(yàn)六:目標(biāo)代碼生成,以PL/O編譯程序?yàn)闃颖荆木幙偪刂瞥绦蚣按a生成程序。
實(shí)驗(yàn)七:綜合設(shè)計,通過結(jié)構(gòu)化設(shè)計方法將上述各種程序綜合為一個完整的軟件系統(tǒng),以窗口、菜單做界面進(jìn)入各個子系統(tǒng),最終實(shí)現(xiàn)編譯器的實(shí)現(xiàn)。
(四)創(chuàng)新性的考核標(biāo)準(zhǔn)
根據(jù)近10年的編譯原理課程設(shè)計的考核經(jīng)驗(yàn),在考核學(xué)生實(shí)驗(yàn)時,創(chuàng)新性的將7個實(shí)驗(yàn)項目分3次考核。第一次考核包括實(shí)驗(yàn)一、二、三,占總分的30%。第二次考核包括實(shí)驗(yàn)四、五,占總分的30%。第三次考核包括實(shí)驗(yàn)六、七,占總分的30%,另外可以增加學(xué)生出勤和報告的考察,占總分的10%。具體的評分原則與優(yōu)勢有以下三點(diǎn):
1.要求學(xué)生選取一個PL/0小程序進(jìn)行詞法分析,并且程序從文件中讀入,詞法分析結(jié)果存入到文件中,可以使學(xué)生練習(xí)編程中文件讀寫的操作。程序中每個單詞進(jìn)行分類,可以使學(xué)生更好地理解和掌握自動機(jī)的思想,實(shí)現(xiàn)標(biāo)識符自動機(jī)的構(gòu)造和無符號數(shù)自動機(jī)的構(gòu)造。符號表進(jìn)行擴(kuò)展,可以使學(xué)生更好地理解詞法分析的過程和原理。
2.要求學(xué)生對簡單的算術(shù)表達(dá)式進(jìn)行語法分析,可以更好地理解LL1語法分析過程。學(xué)生對PL/0程序進(jìn)行語法分析,可以更好地掌握語法分析器的構(gòu)造原理。
3.要求學(xué)生生成中間代碼和目標(biāo)代碼,最終連接成一個完整的編譯器,使學(xué)生對編譯原理課程有了系統(tǒng)化的認(rèn)識,將復(fù)雜的實(shí)驗(yàn)項目概括為整體,更容易進(jìn)行程序設(shè)計和實(shí)現(xiàn)。
針對目前編譯原理課程教學(xué)中存在的問題,提出了因材施教,注重實(shí)驗(yàn)教學(xué)的改革舉措。根據(jù)編譯原理課程設(shè)計的主要內(nèi)容和具體要求,設(shè)置合理的實(shí)驗(yàn)考核標(biāo)準(zhǔn)以及經(jīng)過多年實(shí)踐摸索總結(jié)出的具體評分標(biāo)準(zhǔn)。
參考文獻(xiàn):
[1]黃劍鋒. “編譯原理”教學(xué)內(nèi)容探討[J].電腦知識與技術(shù),2006.
[2]黃賢英等. “編譯原理”課程的地位及教改思路[J].重慶科技學(xué)院學(xué)報(社會科學(xué)版),2005.
[3]陳意云等. 編譯原理(第2版)[M].高等教育出版社,2008.
■ ?編輯∕高 ?偉