劉全中 任國(guó)霞 張陽(yáng)
摘 要:針對(duì)編譯原理課程的教學(xué)現(xiàn)狀,結(jié)合課程的特點(diǎn),探討了一種基于編譯原理教學(xué)輔助系統(tǒng)的教學(xué)模式,該模式從理論教學(xué)和實(shí)踐教學(xué)兩個(gè)方面著手,提高編譯原理教學(xué)的質(zhì)量。
關(guān)鍵詞:教學(xué)輔助系統(tǒng) 教學(xué)模式 教學(xué)改革
中圖分類號(hào):G4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1673-9795(2013)03(a)-0029-02
編譯原理是計(jì)算機(jī)專業(yè)及軟件工程專業(yè)的一門專業(yè)基礎(chǔ)課,在本科計(jì)算機(jī)及軟件工程專業(yè)教學(xué)中占有十分重要的位置。據(jù)統(tǒng)計(jì),自1966年至2009年,55位圖靈獎(jiǎng)獲得者中近1/3的科學(xué)家是因?yàn)樵诔绦蛟O(shè)計(jì)語(yǔ)言和編譯方面獲得該獎(jiǎng)項(xiàng)[1]。該課程系統(tǒng)地講述了高級(jí)程序語(yǔ)言的編譯程序設(shè)計(jì)的基本原理、編譯程序各個(gè)組成部分的設(shè)計(jì)方法及實(shí)現(xiàn)技術(shù)。通過(guò)該課程的學(xué)習(xí),使得學(xué)生掌握文法和形式語(yǔ)言基礎(chǔ)知識(shí),以及構(gòu)造編譯程序的基本原理和方法,從而具備設(shè)計(jì)、分析、實(shí)現(xiàn)和優(yōu)化編譯程序等各方面的能力。
在計(jì)算機(jī)科學(xué)領(lǐng)域,編譯原理是將經(jīng)典的理論和實(shí)踐有效結(jié)合的最好典范[1]。編譯原理把對(duì)高級(jí)程序的編譯過(guò)程分解為各模塊,從編譯問(wèn)題的實(shí)際出發(fā),抽象出科學(xué)問(wèn)題,提煉出經(jīng)典的理論。在經(jīng)典編譯理論的基礎(chǔ)上,形成了一套先進(jìn)的編譯程序設(shè)計(jì)方法和技術(shù)。
1 編譯原理教學(xué)現(xiàn)狀
編譯原理教學(xué)普遍存在的問(wèn)題:教難、學(xué)難、實(shí)踐更難[2]。主要原因如下:
(1)理論抽象難懂。編譯過(guò)程的各個(gè)部分中的理論知識(shí)都很抽象,例如:詞法分析中的自動(dòng)機(jī)理論,語(yǔ)法分析中的形式語(yǔ)言、LL(1)分析法、算法優(yōu)先分析法、LR分析器,語(yǔ)義分析中的語(yǔ)法制導(dǎo)翻譯、各種語(yǔ)法范疇的翻譯等。老師透徹地講解其中的理論知識(shí)難度大,學(xué)生理解、消化理論知識(shí)難度大,把理論知識(shí)付諸實(shí)踐難度更大。
(2)實(shí)驗(yàn)難以實(shí)現(xiàn)。編譯程序?qū)崿F(xiàn)算法復(fù)雜,即使對(duì)理論知識(shí)理解很透徹,實(shí)現(xiàn)起來(lái)依然有難度。比如,語(yǔ)法分析階段,各個(gè)語(yǔ)法范疇自身的嵌套,相互嵌套等;在此基礎(chǔ)上,語(yǔ)義分析中的數(shù)組翻譯、子程序調(diào)用、“拉鏈-回填”等。精確地實(shí)現(xiàn)各種語(yǔ)法范疇的分析與翻譯絕非易事。
(3)對(duì)課程重要性認(rèn)識(shí)不足。據(jù)調(diào)查,很多學(xué)生認(rèn)為在找工作時(shí)編譯原理不重要,面試和考試不會(huì)涉及編譯原理方面的知識(shí),C語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、算法分析、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)等課程與畢業(yè)找工作具有直接的關(guān)系。對(duì)于找工作,編譯原理發(fā)揮的作用可能沒有以上課程體現(xiàn)得那么明顯。從長(zhǎng)遠(yuǎn)發(fā)展來(lái)看,事實(shí)并非如此,編譯原理絕非僅僅是介紹編譯器開發(fā)的一門課程,通過(guò)講授理論、思想和方法,能夠模擬大師們的創(chuàng)新思維,培養(yǎng)學(xué)生創(chuàng)新意識(shí)、創(chuàng)新能力和抽象思維能力[3]。通過(guò)學(xué)習(xí)編譯程序的構(gòu)造方法,增強(qiáng)學(xué)生系統(tǒng)地理解程序語(yǔ)言的設(shè)計(jì)與實(shí)現(xiàn)的能力,提高學(xué)生分析問(wèn)題、解決實(shí)際問(wèn)題的能力,豐富學(xué)生的知識(shí)結(jié)構(gòu),為設(shè)計(jì)大型的軟件奠定良好的基礎(chǔ)。
2 教學(xué)改革方案
編譯原理知識(shí)的理解與消化能夠指導(dǎo)課內(nèi)實(shí)驗(yàn)和實(shí)踐。實(shí)驗(yàn)和實(shí)踐順利完成能進(jìn)一步深化理解理論知識(shí),二者是相輔相成的。因此,編譯原理改革必須雙管齊下,從兩個(gè)方面共同著手,加強(qiáng)理論知識(shí)學(xué)習(xí)和提高實(shí)踐環(huán)節(jié)質(zhì)量。為此,開發(fā)一個(gè)輔助的資源管理系統(tǒng)使二者有效地結(jié)合勢(shì)在必行。系統(tǒng)大體的示意圖如圖1。
2.1 加強(qiáng)理論知識(shí)學(xué)習(xí)
由于編譯原理中的理論知識(shí)抽象難懂,僅僅靠課堂老師講授遠(yuǎn)遠(yuǎn)是不夠的,課下知識(shí)的預(yù)習(xí)及鞏固是非常必要的。編譯原理教學(xué)輔助系統(tǒng)中的教學(xué)部分為教師講授理論知識(shí)、學(xué)生鞏固理論知識(shí)提供輔助。系統(tǒng)中實(shí)踐部分為提高編譯程序開發(fā)質(zhì)量提供支撐。系統(tǒng)將教學(xué)和實(shí)踐結(jié)合起來(lái),使二者相互促進(jìn)、相得益彰。
資源共享:將教學(xué)日歷、教案、教學(xué)大綱、課件等相關(guān)資源上傳到系統(tǒng)中,供學(xué)生們課前預(yù)習(xí)、課后復(fù)習(xí)。
案例動(dòng)畫模擬:對(duì)于抽象的理論知識(shí),給出具體的實(shí)例,以動(dòng)畫的形式模擬分析過(guò)程,使學(xué)生更容易理解理論知識(shí)。例如:遞歸下降分析法、LL(1)分析法、自底向上分析方法的“移進(jìn)-規(guī)約”分析過(guò)程、算符優(yōu)先分析過(guò)程、語(yǔ)義分析加工翻譯的過(guò)程,這些分析過(guò)程都可以用動(dòng)畫形式進(jìn)行模擬。通過(guò)動(dòng)畫模擬,學(xué)生更容易理解抽象的理論知識(shí),增強(qiáng)學(xué)生學(xué)習(xí)的興趣。
經(jīng)典習(xí)題的練習(xí):將每章重點(diǎn)部分相應(yīng)的習(xí)題放入系統(tǒng)中,并給出參考答案,學(xué)生課余時(shí)間練習(xí)鞏固所學(xué)知識(shí)。
章節(jié)習(xí)題、實(shí)驗(yàn)在線批改:學(xué)生在線提交每次習(xí)題、課內(nèi)實(shí)驗(yàn)作業(yè),老師在線批改,指出作業(yè)存在問(wèn)題,并打分。學(xué)生能夠很清楚每次實(shí)驗(yàn)的得分及存在的問(wèn)題。對(duì)于錯(cuò)誤較為集中的部分,理論課上集中講解,解決每章節(jié)存在的突出問(wèn)題。
教學(xué)錄像:將每章節(jié)的理論教學(xué)的錄像上傳到系統(tǒng)中,學(xué)生可以再學(xué)習(xí)自己薄弱的環(huán)節(jié)。此外,把歷屆實(shí)踐環(huán)節(jié)中優(yōu)秀學(xué)生答辯的錄像放到系統(tǒng)中,以供新一屆學(xué)生參照、學(xué)習(xí)、提高。
師生互動(dòng):學(xué)生將授課過(guò)程中存在的問(wèn)題,以及不理解的知識(shí)點(diǎn)等相關(guān)問(wèn)題,以留言的形式在線提交,老師及時(shí)解答學(xué)生提出的問(wèn)題。
2.2 提高實(shí)踐環(huán)節(jié)質(zhì)量
課程學(xué)習(xí)結(jié)束后,絕大多數(shù)的學(xué)生對(duì)編譯原理還是一知半解,對(duì)其中理論的精髓理解依然很膚淺,編譯原理中對(duì)問(wèn)題求解的方法、抽象思維依然未建立起來(lái)。由于課時(shí)的限制,課內(nèi)的實(shí)驗(yàn)一般完成的不理想。因此,理論課程學(xué)習(xí)后,為了深入理解編譯原理中理論的精髓,集中時(shí)間進(jìn)行綜合實(shí)踐勢(shì)在必行。
對(duì)于編譯程序而言,沒有最好只有更好,即使商業(yè)化的編譯器也不是盡善盡美。因此,把歷屆實(shí)踐環(huán)節(jié)的優(yōu)秀作品放到管理系統(tǒng)中作為參照,激發(fā)學(xué)生們對(duì)往屆優(yōu)秀的作品進(jìn)行挑戰(zhàn)。此外,為了提高開發(fā)編譯程序的效率及質(zhì)量,實(shí)踐環(huán)節(jié)引入自動(dòng)生成工具JavaCC。
①產(chǎn)生自頂向下分析的語(yǔ)法分析器。
與Yacc自動(dòng)生成工具不同,JavaCC生成自頂向下的語(yǔ)法分析器。自頂向下分析易于調(diào)試,可以在語(yǔ)法分析的過(guò)程中在語(yǔ)法分析樹中上下傳值,把語(yǔ)義嵌入產(chǎn)生式的任何地方。
②語(yǔ)法易讀和易維護(hù)。
詞法規(guī)范(正則表達(dá)式),語(yǔ)法規(guī)范(BNF范式)書寫在同一個(gè)文件里。
③方便定制詞法分析器和語(yǔ)法分析器的行為。
例如:是否向前看多個(gè)單詞,是否生成靜態(tài)的類,等等。
④完整的錯(cuò)誤提示。
生成的語(yǔ)法分析器可以清楚的指出語(yǔ)法分析的錯(cuò)誤并提供完整的診斷信息。
JavaCC是詞法分析和語(yǔ)法分析的生成器,根據(jù)屬性文法制導(dǎo)翻譯方法,用戶需要把語(yǔ)義部分插入到文法中合適的地方,進(jìn)行屬性傳遞,以實(shí)現(xiàn)語(yǔ)義分析。在實(shí)現(xiàn)編譯程序過(guò)程中,用戶根據(jù)需要定義相關(guān)的Java類,來(lái)完成與JavaCC生成的類之間進(jìn)行交互,以實(shí)現(xiàn)復(fù)雜語(yǔ)法范疇的語(yǔ)義翻譯。
②任務(wù)部署。
實(shí)踐的任務(wù):構(gòu)造Mini C語(yǔ)言的編譯器的前端。要求完成詞法分析、語(yǔ)法分析、語(yǔ)義分析,生成四元式并優(yōu)化。
在進(jìn)行課程實(shí)習(xí)前充分考慮學(xué)生的意愿,自行分成3~5人的小組,每?jī)蓚€(gè)小組配備一個(gè)老師進(jìn)行指導(dǎo)。組長(zhǎng)先闡述任務(wù)的研發(fā)思路及分工情況,經(jīng)過(guò)教師認(rèn)可后學(xué)生才開始進(jìn)行課程設(shè)計(jì)。
眾所周知,軟件開發(fā)尤其是大型軟件的開發(fā),團(tuán)隊(duì)合作至關(guān)重要。通過(guò)實(shí)踐環(huán)節(jié)分組,既培養(yǎng)了學(xué)生的團(tuán)隊(duì)合作精神,又增強(qiáng)了質(zhì)量意識(shí),為畢業(yè)后工作打下堅(jiān)實(shí)基礎(chǔ)。
③考核機(jī)制。
實(shí)踐期間每天進(jìn)行考勤,并把出勤的情況作為最終實(shí)踐環(huán)節(jié)分?jǐn)?shù)的一部分,強(qiáng)化學(xué)生的紀(jì)律觀念,為畢業(yè)后工作培養(yǎng)良好的工作習(xí)慣。
為期一周的實(shí)踐環(huán)節(jié)結(jié)束后,以小組為單位進(jìn)行答辯。組長(zhǎng)首先介紹本小組完成的情況,及每個(gè)組員的分工;然后組長(zhǎng)及組員分別對(duì)自己完成的部分進(jìn)行答辯,并演示自己的程序。答辯過(guò)程中,其余的學(xué)生都隨時(shí)可以提問(wèn)、質(zhì)疑,老師隨機(jī)抽查某段程序完成的功能、設(shè)計(jì)的思路等。根據(jù)每個(gè)學(xué)生完成的情況,參與實(shí)踐環(huán)節(jié)的所有老師進(jìn)行打分,所有分?jǐn)?shù)的平均值即為答辯成績(jī)。通過(guò)答辯形式匯報(bào)自己的工作,提高學(xué)生表達(dá)自己思想的能力。
(3)總結(jié)反饋。
記錄實(shí)踐環(huán)節(jié)中存在的各種問(wèn)題,以完善下次理論教學(xué)和實(shí)踐教學(xué)。例如:文法定義不合理、文法中存在間接左遞歸、語(yǔ)義分析中“拉鏈-回填”錯(cuò)誤等問(wèn)題,以此為案例,反饋到下次的理論教學(xué)中,以減少或者避免類似錯(cuò)誤重演。
3 結(jié)語(yǔ)
由于編譯原理的理論抽象、實(shí)踐難,僅僅從一個(gè)方面改革都很難取得好的效果。編譯原理中的理論和實(shí)踐是相輔相成的關(guān)系,本文研究了理論知識(shí)和實(shí)踐共同改革的方法,該方法能夠系統(tǒng)地、全方位地促進(jìn)編譯原理的教學(xué)改革,進(jìn)而提高編譯原理的教學(xué)質(zhì)量。
參考文獻(xiàn)
[1] 王挺,李夢(mèng)君,周會(huì)平.對(duì)編譯原理課程教學(xué)中計(jì)算思維培養(yǎng)的探討[J].計(jì)算機(jī)教育,2009(21):11-13.
[2] 柴艷妹,馬燕林.編譯原理教學(xué)改革研究[J].計(jì)算機(jī)教育,2011(20):36-39.
[3] 蔣宗禮“編譯原理”課程與專業(yè)能力培養(yǎng)[J].計(jì)算機(jī)教育,2009(21):4-6.