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