彭源,張安勤,孫超超,田秀霞
(上海電力學(xué)院計算機(jī)科學(xué)與技術(shù)學(xué)院,上海 200090)
《編譯原理》課程主要講授編譯器構(gòu)造的一般原理和基本方法。該課程具有很強(qiáng)的原理性和實(shí)踐性。實(shí)驗(yàn)教學(xué)是《編譯原理》課程教學(xué)的重要內(nèi)容,學(xué)生通過完成設(shè)定的實(shí)驗(yàn),可深入理解編譯器的基本原理和技術(shù)、掌握編譯原理中涉及的基本算法、結(jié)構(gòu)和主要技術(shù);在系統(tǒng)級的層次上理解高級程序設(shè)計語言源程序翻譯成計算機(jī)能處理的目標(biāo)代碼語言的整個過程。通過實(shí)驗(yàn),培養(yǎng)學(xué)生的計算思維,訓(xùn)練抽象問題、分析問題、解決問題的能力,鞏固數(shù)據(jù)結(jié)構(gòu)應(yīng)用,增強(qiáng)編程水平,從而達(dá)到學(xué)會知識和提升能力的效果。
《編譯原理》課程理論性較強(qiáng),使用的描述工具,如正規(guī)式、有限自動機(jī)、正規(guī)文法、屬性文法等較為抽象。且整個課程實(shí)際上在解決一件事情:如何構(gòu)造編譯器?知識綜合性高,學(xué)生感到理解困難和掌握算法困難。
在編程實(shí)現(xiàn)算法的時候,學(xué)生經(jīng)常會不知如何著手。原因在于實(shí)驗(yàn)對學(xué)生分析、抽象和解決問題的能力要求較高,學(xué)生的計算思維在前續(xù)的課程中并未經(jīng)過系統(tǒng)的訓(xùn)練,而本課程常規(guī)的教學(xué)方式不能完全覆蓋到這些方面。
編譯器的構(gòu)造遵循模塊化設(shè)計的思路,每個模塊完成不同的任務(wù),相對較為獨(dú)立。但模塊前后又緊密相連,前一個模塊的輸出是后一個模塊的輸入。例如:語法分析在詞法分析出一個個具體單詞的基礎(chǔ)上進(jìn)行,而語義分析與中間代碼的生成則是在語法分析的基礎(chǔ)上,對文法配備了相關(guān)的語義子程序來實(shí)現(xiàn)的。
實(shí)驗(yàn)的目的是掌握編譯器構(gòu)造的整個過程,這就要求各個實(shí)驗(yàn)間不能是割裂的,而應(yīng)該是一個漸進(jìn)的統(tǒng)一的整體。但出于學(xué)生實(shí)踐的角度考慮,又希望各個實(shí)驗(yàn)間具有較好的獨(dú)立性,一個實(shí)驗(yàn)項目的失敗不會影響到其他實(shí)驗(yàn)項目的進(jìn)行。
每個編譯原理的實(shí)驗(yàn)項目都是一個完整的編譯模塊。以往的實(shí)驗(yàn)對所有學(xué)生提出了統(tǒng)一要求,注重對基礎(chǔ)的強(qiáng)訓(xùn)練。但班級中學(xué)生的能力水平是參差不齊的,統(tǒng)一的實(shí)驗(yàn)要求只能滿足中等水平學(xué)生的能力培養(yǎng)需求。能力較弱的學(xué)生會覺得太難,不知從何做起,造成他們沒有編程實(shí)現(xiàn)的動力,進(jìn)而影響學(xué)習(xí)的氣氛;而少數(shù)動手能力很強(qiáng)的學(xué)生會覺得實(shí)驗(yàn)偏簡單,不利于其創(chuàng)新意識的培養(yǎng)。
以最常用的語法規(guī)則表示工具“文法”為例,在默認(rèn)的寫法中,均以大寫字母表示非終結(jié)符(語法范疇),小寫字符表示終結(jié)符(不可再分割的語法單位)。這種形式表示的產(chǎn)生式不容易和實(shí)際的語法概念對應(yīng)起來,學(xué)生在做實(shí)驗(yàn)時不知道究竟在分析什么,造成了認(rèn)知上的困難。
在掌握了算法的理論基礎(chǔ)后,學(xué)生仍然會出現(xiàn)上手困難的問題,經(jīng)多年實(shí)驗(yàn)教學(xué)實(shí)踐發(fā)現(xiàn),原因主要在于以下兩個方面:
大量的細(xì)節(jié)問題。例如:詞法分析實(shí)驗(yàn)中關(guān)鍵字是在識別為標(biāo)志符的基礎(chǔ)上匹配關(guān)鍵字表來實(shí)現(xiàn)、遞歸下降分析時需將讀入的單詞設(shè)置為全局量、語法分析時需加入特殊的符號以表達(dá)已讀到源程序結(jié)尾等。
學(xué)生沒有見過實(shí)際的運(yùn)行代碼,理論與程序聯(lián)系不上,心理上有畏難情緒。
但隨著教學(xué)條件的改善,提供了大量上機(jī)實(shí)踐的機(jī)會,學(xué)生實(shí)際上對自己動手實(shí)現(xiàn)算法,甚至是一個完整的編譯器是很有興趣。在課后遇到問題時,雖可借助QQ、微信等網(wǎng)絡(luò)通訊工具與教師溝通,但效果上不如課堂上的面對面溝通。
課程以貼近學(xué)生熟悉的編程語言的詞法、語法、語義規(guī)則的實(shí)際案例為引導(dǎo)開展算法的講解,即對于每個算法搭配實(shí)際可執(zhí)行的程序。在講解算法的過程中,兼顧理論知識和算法實(shí)現(xiàn),使得學(xué)生在理解算法理論的同時,能建立起用樹、棧、表等數(shù)據(jù)結(jié)構(gòu)描述問題的計算思維。
“案例教學(xué)”模式好處有兩個:一是增強(qiáng)了學(xué)生實(shí)現(xiàn)的信心,學(xué)生能看到算法是實(shí)實(shí)在在可以實(shí)現(xiàn)和運(yùn)行的,并不是僅飄在空中的抽象理論;二是代碼實(shí)現(xiàn)中有許多細(xì)節(jié)處理,可以幫助解決實(shí)現(xiàn)時的困惑,以及引導(dǎo)學(xué)生開拓思路,培養(yǎng)創(chuàng)新意識。
對表示工具較為抽象、和實(shí)際有脫離的問題,采用的辦法是在相對較為簡單的遞歸下降分析程序中,給出一個簡單語言的完整的、用文字形式表示語法范疇的語法描述規(guī)則:
通過此種方式,在仍舊采用了文法作為描述工具的同時,盡量使用自然語言和學(xué)生較為熟悉的編程語言語法結(jié)構(gòu)來設(shè)計語法規(guī)則,從而貼近學(xué)生的認(rèn)知,搭建起語法規(guī)則和實(shí)際應(yīng)用間的關(guān)聯(lián)。
在實(shí)驗(yàn)內(nèi)容體系設(shè)計時,遵循了兩條主線:一是實(shí)驗(yàn)項目間的漸進(jìn)式一體化,二是實(shí)驗(yàn)項目內(nèi)的多層次教學(xué)。實(shí)驗(yàn)內(nèi)容體系如圖1所示。
本課程設(shè)計了五個實(shí)驗(yàn):詞法分析器、語法分析器之遞歸下降分析器、語法分析器之LL(1)分析器、語義分析器、中間代碼生成器。每個實(shí)驗(yàn)圍繞編譯系統(tǒng)中一個獨(dú)立的模塊進(jìn)行安排,每個實(shí)驗(yàn)在保持獨(dú)立性的同時前后承接,建立了漸進(jìn)式一體化的實(shí)驗(yàn)內(nèi)容,以逐步深入培養(yǎng)學(xué)生設(shè)計和實(shí)現(xiàn)一個小型編譯系統(tǒng)的能力。
圖1 編譯原理多層次、漸進(jìn)式一體化的實(shí)驗(yàn)內(nèi)容體系
在語法分析的遞歸下降分析器和LL(1)分析器兩個實(shí)驗(yàn)中均給出了一個不依賴于詞法分析的版本和一個依賴于詞法分析器的版本;而在語義分析器和中間代碼生成器中,給出了YACC語法分析器自動生成工具的使用說明,這為學(xué)生是在上一個實(shí)驗(yàn)的基礎(chǔ)上開展,或是獨(dú)立的開展這兩個實(shí)驗(yàn)提供了選擇。使得一些動手能力較弱的學(xué)生盡量不受之前實(shí)驗(yàn)的影響。
傳統(tǒng)的實(shí)驗(yàn)題目設(shè)計得較為單一,也未考慮差異化的需求。學(xué)生們的水平參差不齊,導(dǎo)致動手能力較弱的學(xué)生做不出,而動手能力較強(qiáng)的學(xué)生則感覺過于簡單。我們在每個功能模塊都提出了一個以能力導(dǎo)向的“基礎(chǔ)目標(biāo)—進(jìn)階目標(biāo)—拓展視野—自我探索”由易到難的多層次教學(xué)目標(biāo)?;A(chǔ)目標(biāo)是最低的教學(xué)要求,一般情況的同學(xué)應(yīng)能達(dá)到進(jìn)階目標(biāo)的層次。鼓勵學(xué)生擴(kuò)展視野,如對于詞法分析和語法分析有自動生成工具LEX和YACC。實(shí)驗(yàn)中給出了關(guān)于這些自動生成工具的可選實(shí)驗(yàn)內(nèi)容,以供學(xué)有余力的學(xué)生熟悉這些工具的部署和使用。實(shí)驗(yàn)中還給出了一些探索型的研究內(nèi)容,如設(shè)計對HTML代碼進(jìn)行分析的詞法規(guī)則和語法規(guī)則,從而實(shí)現(xiàn)編寫網(wǎng)絡(luò)爬蟲軟件,引導(dǎo)學(xué)生將課內(nèi)的知識應(yīng)用到其他相關(guān)領(lǐng)域。
協(xié)作式學(xué)習(xí)[1]是一種以小組或團(tuán)隊的形式組織學(xué)生進(jìn)行學(xué)習(xí)的一種策略。我們將其引入到實(shí)驗(yàn)教學(xué)中。實(shí)驗(yàn)項目的開展以團(tuán)隊的形式組織,組內(nèi)成員共同學(xué)習(xí)、討論和編程解決問題以達(dá)到實(shí)驗(yàn)教學(xué)的目標(biāo)。每個團(tuán)隊包括3-4名隊員,學(xué)生可以自由組隊。組內(nèi)各個成員需分工協(xié)作,每人均承擔(dān)一定的任務(wù),最終成績的評定以團(tuán)隊為單位給出,個體的努力程度會影響到團(tuán)隊每個人的成績,從而強(qiáng)調(diào)了個體的責(zé)任心。該模式的好處在于組內(nèi)成員可以將個人的學(xué)習(xí)心得、實(shí)現(xiàn)思路等在組內(nèi)共享,使得每個人的學(xué)習(xí)收益最大化,同時促進(jìn)了團(tuán)隊合作精神。并更進(jìn)一步,在翻轉(zhuǎn)課堂匯報時與全班同學(xué)共享與討論,達(dá)到相互學(xué)習(xí),激發(fā)創(chuàng)新思維的目的。
傳統(tǒng)實(shí)驗(yàn)開展的形式是首先布置實(shí)驗(yàn)任務(wù),然后講解相關(guān)實(shí)現(xiàn)細(xì)節(jié),接著留給學(xué)生編程實(shí)現(xiàn),最后上交實(shí)驗(yàn)程序和報告。學(xué)生在接收任務(wù)的時候并未開始建立自己的實(shí)現(xiàn)邏輯,對于實(shí)現(xiàn)細(xì)節(jié)不能完全吸收內(nèi)化,課后仍舊會碰到各種問題,且沒有足夠的時間和機(jī)會與教師互動。從以往實(shí)驗(yàn)的情況來看,班級上交的實(shí)驗(yàn)代碼較為雷同,說明學(xué)生遇到困難時無法自我解決,又缺少與教師的大量溝通,導(dǎo)致實(shí)驗(yàn)效果不好。
近年來提出的翻轉(zhuǎn)課堂[2-3]改變了實(shí)驗(yàn)展開的前后順序。實(shí)驗(yàn)在理論課程之前已布置,學(xué)生在理論課上熟悉算法原理,課下通過教師提供的微視頻和實(shí)驗(yàn)指導(dǎo)手冊來建立計算思維,并試著編程實(shí)現(xiàn)。實(shí)驗(yàn)課堂上學(xué)生通過演講報告,闡述自己對問題的描述方法、算法實(shí)現(xiàn)的思路、實(shí)驗(yàn)環(huán)境搭建的過程,及演示程序代碼和運(yùn)行結(jié)果。教師(包括其他組同學(xué))與報告的同學(xué)通過互動方式討論實(shí)驗(yàn)中存在的困惑,針對學(xué)生自學(xué)過程中無法自己解決的問題由教師進(jìn)行講解。課后學(xué)生進(jìn)一步完善實(shí)驗(yàn)程序,最終上交實(shí)驗(yàn)報告和程序。
實(shí)踐表明,該種方式調(diào)動了積極性和創(chuàng)造力,學(xué)生經(jīng)常會有一些創(chuàng)新性的想法出現(xiàn);演示和匯報激發(fā)了學(xué)生的表現(xiàn)力,也給學(xué)生施加了一定的壓力,使其能以更加認(rèn)真的態(tài)度對待實(shí)驗(yàn);課堂上的集中討論有助于形成活躍的學(xué)習(xí)氛圍,突顯了實(shí)驗(yàn)中的重點(diǎn)和難點(diǎn),通過教師的講解,能以較高的效率解決實(shí)際中的困難。
本文對編譯原理實(shí)驗(yàn)教學(xué)的特點(diǎn)和存在的問題進(jìn)行了總結(jié),從改革課堂教學(xué)、更新實(shí)驗(yàn)內(nèi)容體系、更新實(shí)驗(yàn)組織形式、引入翻轉(zhuǎn)課堂等方面進(jìn)行了實(shí)驗(yàn)改革和探索。從對近幾屆學(xué)生的實(shí)施情況來看,學(xué)生的主動學(xué)習(xí)能力和主動探索能力得到有效提高,以往照抄照搬的現(xiàn)象大大減少,取而代之的是親自編程實(shí)現(xiàn);期末成績反映出學(xué)生對算法的掌握程度有較大提高,說明改革是合理有效的。未來我們在日常教學(xué)中將進(jìn)一步研究創(chuàng)新和改革,以期達(dá)到更好的教學(xué)效果。
參考文獻(xiàn):
[1]張水波.分組協(xié)作式學(xué)習(xí)在計算機(jī)教學(xué)中的實(shí)踐與思考[J].寧德師專學(xué)報(自然科學(xué)版),2006,18(3):307-309
[2]Bergmann J,Overmyer J,Wilie B.The Flipped Class:Myths Versus Reality[OL].The Daily Riff,http://www.thedailyriff.com/articles/the-flipped-class-conversation-689.php.
[3]Davies R S,Dean D L,BallN.Flipping the Classroom and Instructional Technology Integration in a College-Level Information Systems Spreadsheet Course[J].Educational Technology Research and Development,2013(4):563-580.
[4]彭源,田秀霞,張安勤,等.基于ACM競賽理念的C++程序設(shè)計教學(xué)模式改革[J].計算機(jī)教育,2013(7):70-73.
[5]田秀霞,彭源,孫超超,等.創(chuàng)新實(shí)踐項目驅(qū)動的信息安全專業(yè)教學(xué)改革[J].計算機(jī)教育,2015,No.251(23):30-33.
[6]田玲,余盛季,王曉斌,等.《編譯原理》實(shí)驗(yàn)教學(xué)改革及探索[J].實(shí)驗(yàn)科學(xué)與技術(shù),2013,11(6):297-299.
[7]夏斌,張慧,閭素紅.編譯原理課程實(shí)驗(yàn)教學(xué)改革與探索[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(10):135-135.