彭源 孫超超 田秀霞 張安勤
摘要:編譯原理作為專業(yè)核心課程,具有較強(qiáng)的理論性和實(shí)踐性。該文結(jié)合多年的教學(xué)經(jīng)驗(yàn),以培養(yǎng)學(xué)生能力為目標(biāo),從合理組織教學(xué)內(nèi)容、突出實(shí)踐的重要性、更新考核方式等方面給出了一些編譯原理教學(xué)改革的基本思路。
關(guān)鍵詞:編譯原理;教學(xué)改革;教學(xué)實(shí)踐
中圖分類號:G424 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)03-0134-02
Abstract:As a professional core course, compiler principles have strong theoretical and practical natures. Based on the teaching experience of many years, this paper puts forward some basic ideas of teaching reform of compiler principles from the aspects of organizing the teaching content reasonably, highlighting the importance of practice and updating the method of examination.
Key words: compiler principles;teaching reform; teaching practice
1 概述
《編譯原理》是信息安全、網(wǎng)絡(luò)工程、計(jì)算機(jī)科學(xué)與技術(shù)等專業(yè)的一門重要專業(yè)核心課程,主要介紹編譯程序構(gòu)造的一般原理和基本方法。在理論、技術(shù)、方法上對學(xué)生提供系統(tǒng)而有效的訓(xùn)練,從而提高學(xué)生的素質(zhì)和能力。課程的特點(diǎn)是理論性和技術(shù)性都非常強(qiáng),綜合知識集成度高,因此較難掌握和理解。許多學(xué)者對該門課程教學(xué)進(jìn)行了探討,如文獻(xiàn)[1]提出了分階段、實(shí)驗(yàn)報(bào)告+答辯的考核方式;文獻(xiàn)[2]將ACM在線評測引入了本課程的實(shí)踐教學(xué);文獻(xiàn)[3]在課程中引入了建構(gòu)主義學(xué)習(xí)理論;文獻(xiàn)[4]設(shè)計(jì)了一個(gè)支持自定義語言的可視化編譯教學(xué)輔助工具等。
為了更好的提升教學(xué)效果,近幾年來我們在編譯原理課程的教學(xué)改革與實(shí)踐中做了一定的探索,獲得了一定的方法,總結(jié)了一定的經(jīng)驗(yàn),也取得了一些成效。本文介紹我們在課程教學(xué)改革和實(shí)踐中的經(jīng)驗(yàn)和體會。
2 以“能力導(dǎo)向的教育”為目標(biāo)指導(dǎo)教學(xué)過程
編譯原理課程有著較為成熟的理論體系,除算法知識本身外,更蘊(yùn)含了問題求解的典型思路和方法,因此在課程的教學(xué)過程中,不僅要考慮知識的傳輸,更要考慮對學(xué)生能力和素質(zhì)的培養(yǎng)。授之以魚,更要授之以漁。
2.1 課程內(nèi)容作為知識的載體
專業(yè)的課程體系是一個(gè)整體,課程之間互相關(guān)聯(lián),如編譯程序使用的數(shù)據(jù)結(jié)構(gòu)和算法是前面“數(shù)據(jù)結(jié)構(gòu)”、“離散數(shù)學(xué)”等課程的典型應(yīng)用。課內(nèi)所講的內(nèi)容也不是孤立的,課程中蘊(yùn)含的許多軟件技術(shù),如介紹的經(jīng)典語言分析方法和工具,對于設(shè)計(jì)一些實(shí)用的工具和軟件,像自然語言理解、網(wǎng)絡(luò)信息處理、網(wǎng)絡(luò)協(xié)議的分析與實(shí)現(xiàn)等都是必備的基礎(chǔ)。課程教學(xué)不能狹隘的只關(guān)注于本課程知識點(diǎn)的講解,而應(yīng)從人才培養(yǎng)的角度,承前啟后,結(jié)合與融入更多相關(guān)的內(nèi)容,從課程特定的知識和算法,引申到普遍適用的知識和算法,引導(dǎo)學(xué)生開闊視野,激發(fā)其探索興趣。
2.2 計(jì)算思維的能力培養(yǎng)
課程學(xué)習(xí)的目的并不僅僅是為了構(gòu)建一個(gè)編譯器,實(shí)際上只有極少數(shù)的學(xué)生以后會從事編譯系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。但編譯原理課程作為傳統(tǒng)的核心課程,蘊(yùn)涵了計(jì)算機(jī)學(xué)科中解決問題的思路、抽象問題和解決問題的方法,因此是實(shí)施能力培養(yǎng)的最佳載體。
計(jì)算思維指運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計(jì)系統(tǒng)和理解人類的行為,由卡內(nèi)基梅隆大學(xué)的周以真教授于2006年提出。它包含了一系列的計(jì)算機(jī)科學(xué)的思維方法,如遞歸、抽象和分解、啟發(fā)式推理等。課程從淡化推導(dǎo)、證明等理論形態(tài)的內(nèi)容,強(qiáng)調(diào)編譯原理中抽象和設(shè)計(jì)形態(tài)內(nèi)容的角度出發(fā),教學(xué)中注意對算法核心思想的分析,挖掘知識背后的內(nèi)容,模擬大師們的創(chuàng)新思維,使學(xué)生能夠掌握其關(guān)鍵,從而培養(yǎng)學(xué)生的創(chuàng)新意識和創(chuàng)新能力,訓(xùn)練學(xué)生“計(jì)算機(jī)問題求解”的基本能力,強(qiáng)化其計(jì)算思維。學(xué)生通過學(xué)習(xí)不僅可以在系統(tǒng)級的層次上對程序變換和算法有更為深入的理解,更是學(xué)到了問題的求解方法和思路。達(dá)到不僅學(xué)知識、而且培養(yǎng)能力的效果。
3 教學(xué)內(nèi)容組織
編譯器是一個(gè)完整的體系,在有限的教學(xué)時(shí)間內(nèi)不可能事無巨細(xì)、面面俱到。因此教學(xué)內(nèi)容的選擇是教學(xué)中非常重要的一環(huán)。筆者在選擇教學(xué)內(nèi)容時(shí),主要從以下方面來進(jìn)行考慮:
1) 作為整個(gè)課程理論基礎(chǔ)的基本概念、工具和原理,以及具有典型意義、效果好、應(yīng)用比較廣泛的主要編譯技術(shù)和方法細(xì)致深入的進(jìn)行討論。
以有限自動(dòng)機(jī)為例,它不僅應(yīng)用于本課程表示詞法規(guī)則、識別活前綴等,也是計(jì)算機(jī)領(lǐng)域中經(jīng)常用到的概念和工具,因此需詳細(xì)介紹。講授的內(nèi)容應(yīng)包括有限自動(dòng)機(jī)的確定化、最小化的過程,以及該工具與其他工具如正規(guī)文法、正規(guī)式的轉(zhuǎn)換方法。
在編譯技術(shù)方面,如遞歸下降分析算法、LR分析算法是典型的軟件技術(shù),體現(xiàn)了抽象問題、遞歸解決問題、自動(dòng)化處理的思路,具有典型的意義,對學(xué)生的能力培養(yǎng)具有舉足輕重的意義,應(yīng)詳細(xì)講述并在實(shí)踐中深化理解。而對一些較為陳舊的算法,如算符優(yōu)先分析,其在現(xiàn)代編譯系統(tǒng)中已不再廣泛使用,因此可以去掉。
2) 根據(jù)學(xué)生的認(rèn)識規(guī)律來組織安排教學(xué)內(nèi)容,層次清晰,重點(diǎn)突出,難點(diǎn)分散。
課程開展按照詞法分析、語法分析、屬性文法和語義分析、中間代碼生成、符號表和內(nèi)存空間組織、優(yōu)化的主線展開。將編譯程序各組成部分的基本功能、邏輯關(guān)系、實(shí)現(xiàn)思路深入淺出地闡述清楚,不盲目的追求全而深,不過分糾纏于一些繁瑣的具體技術(shù)細(xì)節(jié)。強(qiáng)調(diào)對編譯原理和技術(shù)的宏觀理解和掌握,而不是一些微觀的算法。如符號表的插入和查找方法,基本的思路在數(shù)據(jù)結(jié)構(gòu)等課程中已有體現(xiàn),雖然針對編譯器中的符號表,有一些特定的處理算法,但對編譯器的整體理解貢獻(xiàn)不大,無需多費(fèi)課時(shí)。
以掌握工具、體驗(yàn)思路為主,淡化理論證明過程。如文法、正規(guī)式、DFA間等價(jià)性的證明就無需強(qiáng)調(diào),只需告訴學(xué)生此結(jié)論即可。對于LR分析算法系列,LR(0),SLR,LR(1),LALR的分析表構(gòu)造只是從分析能力和工作量角度考慮,采用了不同的折中策略,思路是一致的。因此在講授時(shí),以一個(gè)算法為主,其他的算法順帶提及,或在課外作為課程內(nèi)容的延伸。
3) 結(jié)合專業(yè),微調(diào)教學(xué)重點(diǎn)
《編譯原理》課程在我校計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程、信息安全等多個(gè)專業(yè)均有開設(shè),不同專業(yè)培養(yǎng)計(jì)劃不同,教授過程中的側(cè)重點(diǎn)和能力訓(xùn)練方面也應(yīng)有所區(qū)別。如網(wǎng)絡(luò)工程和軟件工程專業(yè)為工科專業(yè),與計(jì)算機(jī)科學(xué)與技術(shù)和信息安全專業(yè)偏理論不同,教學(xué)時(shí)應(yīng)注重工程性人才的培養(yǎng),更加強(qiáng)調(diào)算法實(shí)踐,在實(shí)現(xiàn)中更深入理解算法。
教學(xué)還應(yīng)結(jié)合專業(yè)特點(diǎn)開展。以信息安全專業(yè)為例,在開展運(yùn)行時(shí)內(nèi)存空間的組織這部分的教學(xué)內(nèi)容時(shí),引入了一個(gè)緩沖區(qū)溢出的例子,該例子在對程序分配的內(nèi)存空間結(jié)構(gòu)的詳細(xì)理解基礎(chǔ)上,通過精心構(gòu)造溢出數(shù)據(jù)的內(nèi)容,破壞了函數(shù)調(diào)用后返回的地址,使得程序運(yùn)行到不期望的代碼處。從而引導(dǎo)學(xué)生思考程序運(yùn)行時(shí)內(nèi)存分配可能會存在的安全問題以及延伸思考解決辦法。
4 實(shí)踐是最好的學(xué)習(xí)方式
學(xué)生通過教學(xué)過程能夠較好地掌握算法原理和思路,但在理論實(shí)現(xiàn)算法設(shè)計(jì)時(shí)仍有不知如何下手的困惑。通過長期教學(xué)分析,原因在如下兩個(gè)方面:1.大量的細(xì)節(jié)問題。例如:詞法分析實(shí)驗(yàn)中需對超前搜索進(jìn)行字符回退處理、關(guān)鍵詞是在識別為標(biāo)志符的基礎(chǔ)上匹配關(guān)鍵詞表來實(shí)現(xiàn)、遞歸下降分析時(shí)需將讀入的單詞設(shè)置為全局量等。2.沒有見過實(shí)際的代碼,理論與程序聯(lián)系不上,心理上有畏難情緒。
學(xué)生雖在前續(xù)課程中學(xué)習(xí)與培養(yǎng)了編程能力,但本課程中算法對編程能力的要求更為系統(tǒng)和全面,需要用到多種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。但隨著教學(xué)條件和網(wǎng)絡(luò)溝通渠道的完善,現(xiàn)在的學(xué)生可以有更多機(jī)會和時(shí)間去上機(jī)實(shí)踐,遇到問題也可以通過微信、QQ等實(shí)時(shí)的獲得老師的指導(dǎo)與解惑。學(xué)生實(shí)際上對自己動(dòng)手實(shí)現(xiàn)算法,甚至是一個(gè)完整的編譯器是有著更高的渴望的,這就要求課程應(yīng)當(dāng)尊重學(xué)生發(fā)展規(guī)律,滿足學(xué)生自我實(shí)現(xiàn)的想法,提升學(xué)生的編程能力,引導(dǎo)學(xué)生獲得成功的體驗(yàn)。
4.1 課程以實(shí)踐為引導(dǎo)開展算法的講解
對于每個(gè)算法都配備了小型的可實(shí)際運(yùn)行的程序,在講解算法過程中,就穿插入算法實(shí)現(xiàn)代碼的講解。這么做好處有兩個(gè):一是讓學(xué)生看到算法并不是飄在空中的理論,而是實(shí)實(shí)在在可以實(shí)現(xiàn)和運(yùn)行的,增強(qiáng)了學(xué)生實(shí)現(xiàn)的信心;二是算法中的一些小細(xì)節(jié)的處理可以直觀的通過代碼展示出來,幫助學(xué)生開拓思路。
4.2 實(shí)驗(yàn)內(nèi)容前后銜接,鼓勵(lì)自我探索
將理論課與實(shí)驗(yàn)課有機(jī)地結(jié)合,通過實(shí)驗(yàn)課的實(shí)踐,讓學(xué)生將理論知識通過實(shí)驗(yàn)進(jìn)行驗(yàn)證并設(shè)計(jì)實(shí)現(xiàn);反之,在實(shí)驗(yàn)中產(chǎn)生的各種問題,通過理論課的講解分析解決;如此相互促進(jìn),不僅加深了理論知識的理解,同時(shí)也提高了實(shí)際編程能力和學(xué)習(xí)興趣。每個(gè)實(shí)驗(yàn)圍繞編譯系統(tǒng)中一個(gè)獨(dú)立的模塊進(jìn)行安排,由易到難,逐步深入,在保持每個(gè)實(shí)驗(yàn)獨(dú)立性的同時(shí),注意前后承接,以培養(yǎng)學(xué)生設(shè)計(jì)和實(shí)現(xiàn)一個(gè)小型編譯系統(tǒng)的能力。
鼓勵(lì)學(xué)生擴(kuò)展視野。對于詞法分析和語法分析,有LEX和YACC自動(dòng)生成工具。實(shí)驗(yàn)中給出了關(guān)于這些自動(dòng)生成工具的可選實(shí)驗(yàn)內(nèi)容,以熟悉這些工具的部署和使用。實(shí)驗(yàn)中還給出了一些探索型的研究內(nèi)容,如編寫文本編輯軟件,引導(dǎo)學(xué)生將課內(nèi)的知識應(yīng)用到其他相關(guān)領(lǐng)域。
5 引入“一紙開卷”考核方式
在考試考核方面,考慮到編譯系統(tǒng)的算法相對復(fù)雜但固定、本門課程的目的是通過算法提高學(xué)生分析問題、抽象問題和解決問題的能力,記憶算法本身的步驟不是考核的要點(diǎn)。因此考慮采用“一紙開卷”的形式,即在考試時(shí)允許學(xué)生最多帶一張A4大小的紙進(jìn)去,上面可以由學(xué)生自行組織記錄知識要點(diǎn)和內(nèi)容。具體實(shí)施思路如下:考試專用紙于開考前兩周發(fā)放給學(xué)生,每人一張。學(xué)生必須在考前填寫完整專用紙上的相關(guān)欄目,可在專用紙上書寫任何內(nèi)容,可正反面書寫,但不能打印、復(fù)印,必須由本人手寫;學(xué)生在考試時(shí)可將專用紙帶入考場翻閱,但考試中不得與其他同學(xué)傳遞交流,否則以舞弊論處;不能在專用紙上粘貼其他紙張,否則以夾帶論處??紙鲆?guī)則和紀(jì)律按照閉卷考試執(zhí)行??荚嚱Y(jié)束后,考生將專用紙與試卷、答題紙一并上交。以備核查。
通過此種形式,這樣既使得學(xué)生通過對知識要點(diǎn)的組織鞏固了學(xué)習(xí)效果,又可以引導(dǎo)學(xué)生將學(xué)習(xí)的重點(diǎn)放到對原理的理解上,減輕了對算法步驟本身無意義的記憶(實(shí)踐設(shè)計(jì)中隨時(shí)可查)。
6 總結(jié)
課程的開展要符合人才培養(yǎng)的目標(biāo),并根據(jù)課程特點(diǎn),合理組織教學(xué)內(nèi)容,突出實(shí)踐的重要性,并引導(dǎo)學(xué)生將精力放在對原理的理解和實(shí)踐上。近幾年的實(shí)踐證明,我們對《編譯原理》教學(xué)中的進(jìn)行的改革和探索取得了一定的成果,進(jìn)一步提高了教學(xué)質(zhì)量。在培養(yǎng)學(xué)生實(shí)踐能力、計(jì)算思維能力等方面取得了一定成效,值得進(jìn)一步的實(shí)踐和探索。
參考文獻(xiàn):
[1] 丁學(xué)雷, 吳春寒, 賀汛. 編譯原理課程考法改革探討[J]. 計(jì)算機(jī)工程與科學(xué), 2014,36(a02):169-173.
[2] 尤楓, 史晟輝. ACM在線評測在編譯原理實(shí)踐教學(xué)中的應(yīng)用探討[J]. 計(jì)算機(jī)教育, 2009(20):113-115.
[3] 朱文華, 王榮波. 基于建構(gòu)主義的編譯原理實(shí)踐教學(xué)研究[J]. 杭州電子科技大學(xué)學(xué)報(bào):社會科學(xué)版, 2008(4):71-74.
[4] 褚文杰, 童蘭軒, 魏瑋,等. 支持自定義語言的可視化編譯教學(xué)輔助工具設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用, 2017,37(s1):331-335.