江赟
(重慶工商大學(xué)計(jì)算機(jī)科學(xué)與信息工程學(xué)院,重慶 400067)
淺談普通本科院校計(jì)算機(jī)專(zhuān)業(yè)《編譯原理》課程教學(xué)
江赟
(重慶工商大學(xué)計(jì)算機(jī)科學(xué)與信息工程學(xué)院,重慶 400067)
《編譯原理》課程是計(jì)算機(jī)專(zhuān)業(yè)的一門(mén)經(jīng)典核心專(zhuān)業(yè)課程,課程內(nèi)容豐富而抽象,教與學(xué)的難度都比較大。本文從教學(xué)目標(biāo)、教學(xué)內(nèi)容及教學(xué)方法三個(gè)方面對(duì)普通本科院校計(jì)算機(jī)專(zhuān)業(yè)的《編譯原理》課程教學(xué)進(jìn)行探討,并提出一些見(jiàn)解。
編譯原理;教學(xué)內(nèi)容;教學(xué)方法
計(jì)算機(jī)學(xué)科是一門(mén)同時(shí)具備技術(shù)性、工程性和應(yīng)用性的學(xué)科,其學(xué)科體系是有基礎(chǔ)理論支撐的。近年來(lái),隨著信息技術(shù)的迅猛發(fā)展及其應(yīng)用領(lǐng)域的不斷深化,計(jì)算機(jī)知識(shí)正在成為各專(zhuān)業(yè)的基本教育內(nèi)容,幾乎所有專(zhuān)業(yè)的大學(xué)畢業(yè)生都要求掌握基本的計(jì)算機(jī)操作技能,非計(jì)算機(jī)專(zhuān)業(yè)學(xué)生需要通過(guò)計(jì)算機(jī)等級(jí)考試,而電子信息、通信工程、信息管理、電子商務(wù)等與信息技術(shù)密切相關(guān)的專(zhuān)業(yè)在課程設(shè)置上更是與計(jì)算機(jī)專(zhuān)業(yè)大量重疊。在這種背景下,計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的專(zhuān)業(yè)優(yōu)勢(shì)應(yīng)該體現(xiàn)在:通過(guò)系統(tǒng)地學(xué)習(xí)與訓(xùn)練,熟練掌握專(zhuān)業(yè)的原理性知識(shí)以及基本的應(yīng)用技能,能夠做到“知其然”,并且“知其所以然”。要達(dá)到這種專(zhuān)業(yè)優(yōu)勢(shì),學(xué)生必然少不了要接受專(zhuān)業(yè)基礎(chǔ)課程的熏陶,而編譯原理就是這樣一門(mén)介紹原理性知識(shí)的專(zhuān)業(yè)基礎(chǔ)課程。
《編譯原理》課程是計(jì)算機(jī)專(zhuān)業(yè)中的一門(mén)經(jīng)典的核心專(zhuān)業(yè)課程,該課程具有理論與實(shí)踐相結(jié)合的鮮明特點(diǎn),具體而形象地說(shuō)明了經(jīng)典理論與先進(jìn)技術(shù)之間的聯(lián)系。通過(guò)系統(tǒng)學(xué)習(xí)編譯理論,學(xué)生可以認(rèn)識(shí)到科學(xué)理論的基礎(chǔ)作用,提高學(xué)習(xí)理論的興趣,形成理論素養(yǎng),另外,通過(guò)課程的實(shí)驗(yàn)部分,分析改進(jìn)編譯程序或工具,學(xué)生可以提高運(yùn)用理論知識(shí)解決實(shí)際問(wèn)題的能力。通過(guò)《編譯原理》課程的理論學(xué)習(xí)和實(shí)驗(yàn),學(xué)生可以體會(huì)到理論學(xué)習(xí)的意義和動(dòng)手實(shí)踐的樂(lè)趣。
然而,在普通本科院校的計(jì)算機(jī)專(zhuān)業(yè)中,由于《編譯原理》課程的教學(xué)內(nèi)容涉及到理論的抽象性,并且課程內(nèi)容覆蓋廣泛,與高級(jí)語(yǔ)言、離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計(jì)與實(shí)現(xiàn)等很多課程的知識(shí)相關(guān)聯(lián),這使得學(xué)生對(duì)課程內(nèi)容的理解有較大的困難。此外,學(xué)生畢業(yè)后很少有人直接參與編譯系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),他們認(rèn)為本課程對(duì)其畢業(yè)后的職業(yè)發(fā)展沒(méi)有作用,于是學(xué)生的學(xué)習(xí)積極性較差。因此,筆者從教學(xué)目標(biāo)、教學(xué)內(nèi)容及教學(xué)方法三個(gè)方面對(duì)普通本科院校計(jì)算機(jī)專(zhuān)業(yè)的《編譯原理》課程教學(xué)進(jìn)行探討,并提出一些見(jiàn)解。
按照教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會(huì)的發(fā)展戰(zhàn)略研究報(bào)告,計(jì)算機(jī)專(zhuān)業(yè)的本科人才應(yīng)該被分為科學(xué)型、工程型和應(yīng)用型,而且絕大多數(shù)應(yīng)該是工程型和應(yīng)用型的。而從普通高等院校計(jì)算機(jī)專(zhuān)業(yè)本科畢業(yè)生的就業(yè)情況來(lái)看,絕大多數(shù)畢業(yè)生都不會(huì)專(zhuān)門(mén)從事計(jì)算機(jī)理論的研究工作,也很少有人研究和開(kāi)發(fā)編譯系統(tǒng)。但《編譯原理》課程中涉及到的一些經(jīng)典理論和方法,特別適合于傳授學(xué)生計(jì)算機(jī)科學(xué)研究的方法,并且訓(xùn)練他們“抽象及自動(dòng)化”的計(jì)算思維。在當(dāng)今計(jì)算機(jī)技術(shù)飛速發(fā)展的時(shí)代背景下,計(jì)算思維可以讓學(xué)生在理論的指導(dǎo)下尋找解決問(wèn)題的方法,在未來(lái)更好地適應(yīng)新技術(shù),朝不同的方向發(fā)展。因此,編譯原理課程不應(yīng)被片面理解為編譯程序的介紹性課程,而應(yīng)該提升到培養(yǎng)專(zhuān)業(yè)素質(zhì)、訓(xùn)練思維的層面,特別是培養(yǎng)學(xué)生從實(shí)際問(wèn)題中抽象出科學(xué)問(wèn)題并運(yùn)用科學(xué)的思維方式進(jìn)行問(wèn)題求解的
思想??紤]到普通本科院校計(jì)算機(jī)專(zhuān)業(yè)大多數(shù)學(xué)生的需求,我們對(duì)學(xué)生提出以下要求:
(1)較為全面地了解課程,熟悉編譯程序的構(gòu)造過(guò)程,理解編譯程序構(gòu)造過(guò)程中涉及的基本算法和基本技術(shù)。
(2)掌握形式語(yǔ)言與自動(dòng)機(jī)的基本理論和基本概念。
(3)能夠使用有窮自動(dòng)機(jī)的理論和方法,解決常見(jiàn)離散時(shí)間問(wèn)題。
(4)從系統(tǒng)級(jí)別上提升對(duì)程序、算法的認(rèn)識(shí),提高學(xué)習(xí)、理解和實(shí)用編程語(yǔ)言的能力,提高編寫(xiě)高質(zhì)量代碼的能力。
國(guó)外從上世紀(jì)60年代開(kāi)始開(kāi)設(shè)《編譯原理》課程,而國(guó)內(nèi)則從上世紀(jì)80年代開(kāi)始。經(jīng)過(guò)幾十年的發(fā)展,《編譯原理》課程的教學(xué)內(nèi)容越來(lái)越多,課程涉及的知識(shí)越來(lái)越多。但是以目前教學(xué)的基本學(xué)時(shí)數(shù)來(lái)看,《編譯原理》課程的課時(shí)數(shù)不足,要講授教材中的所有內(nèi)容基本不可能,這就需要教師在有限的課時(shí)內(nèi)充分合理地安排教學(xué)內(nèi)容。針對(duì)編譯過(guò)程的各個(gè)邏輯階段,筆者根據(jù)普通本科院校計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的理解情況對(duì)相關(guān)的教學(xué)內(nèi)容進(jìn)行適當(dāng)取舍。
(1)詞法分析:有窮自動(dòng)機(jī)是一個(gè)經(jīng)常使用的概念和工具,可以詳細(xì)討論不確定的有窮自動(dòng)機(jī)及其確定化,確定的有窮自動(dòng)機(jī)及其最小化,有窮自動(dòng)機(jī)與正則式的關(guān)系,并介紹詞法分析器的生成器。
(2)語(yǔ)法分析:作為必備的基礎(chǔ)知識(shí),需要對(duì)上下文無(wú)關(guān)文法做出介紹。在介紹語(yǔ)法分析方法時(shí),側(cè)重點(diǎn)應(yīng)放在自上而下分析方法,其中應(yīng)該先介紹比較直觀、便于學(xué)生接受的LL(1)文法和預(yù)測(cè)分析方法,然后舉一個(gè)較為簡(jiǎn)單的LL(1)文法的預(yù)測(cè)分析程序作為例子幫助學(xué)生理解。而對(duì)于自下而上分析方法,建議只介紹其基本概念、使用LR分析表進(jìn)行分析及分析器的自動(dòng)生成器等知識(shí)點(diǎn)。
(3)語(yǔ)義分析:對(duì)靜態(tài)語(yǔ)義檢查進(jìn)行概述,重點(diǎn)應(yīng)放在類(lèi)型檢查上。
(4)中間代碼生成:主要介紹中間代碼的各種形式;對(duì)于賦值語(yǔ)句和控制流語(yǔ)句,主要介紹翻譯的語(yǔ)義動(dòng)作;對(duì)于類(lèi)型和變量聲明語(yǔ)句,主要介紹如何組織符號(hào)表。
(5)符號(hào)表及存儲(chǔ)管理:這部分內(nèi)容在數(shù)據(jù)結(jié)構(gòu)等前序課程中已經(jīng)介紹過(guò),沒(méi)有必要在這里重復(fù)介紹。如果課時(shí)數(shù)允許的話,可以考慮從編寫(xiě)程序和程序排錯(cuò)的角度介紹三種全局存儲(chǔ)分配策略,以及如何實(shí)現(xiàn)各種參數(shù)傳遞方式。
(6)代碼優(yōu)化:通過(guò)實(shí)例介紹編譯器可以完成的各種優(yōu)化,各種優(yōu)化算法不做強(qiáng)制要求,學(xué)有余力的學(xué)生可以在課后自學(xué)。
(7)代碼生成:選擇一種簡(jiǎn)單的代碼生成算法進(jìn)行介紹,讓學(xué)生對(duì)代碼生成有所了解即可。
《編譯原理》課程是計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)眾多專(zhuān)業(yè)課程中理論與實(shí)踐相結(jié)合的典范,在教學(xué)過(guò)程中也要從課堂教學(xué)和實(shí)驗(yàn)教學(xué)兩方面著手。
4.1 理論教學(xué)
在課堂教學(xué)過(guò)程中,學(xué)生要理解編譯原理中抽象的基本概念,還要掌握解決問(wèn)題的思路和方法,教學(xué)難度比較大。針對(duì)編譯系統(tǒng)中的一些抽象概念可以采取圖示、類(lèi)比等方法使抽象的內(nèi)容直觀化形象化,以保證課堂教學(xué)質(zhì)量。
(1)圖示法。在文法與語(yǔ)言這一章里,學(xué)生往往會(huì)對(duì)句型、句子、語(yǔ)言、短語(yǔ)、直接短語(yǔ)、句柄等抽象概念覺(jué)得無(wú)法理解或一知半解,只能死記硬背,于是在求解短語(yǔ)時(shí)容易出錯(cuò)。求解短語(yǔ)的問(wèn)題其實(shí)可以通過(guò)畫(huà)語(yǔ)法樹(shù)的方法來(lái)解決,這種方法簡(jiǎn)單直觀,使用的是學(xué)生在數(shù)據(jù)結(jié)構(gòu)課程中學(xué)習(xí)過(guò)的樹(shù)與森林的相關(guān)知識(shí),可以遍歷所有的情況不會(huì)有遺漏。在講到詞法分析一章時(shí),會(huì)涉及到有窮狀態(tài)自動(dòng)機(jī)這個(gè)在解決離散事件問(wèn)題中非常重要的思維模型。在解決離散事件問(wèn)題時(shí),可以通過(guò)有窮狀態(tài)自動(dòng)機(jī)來(lái)反映問(wèn)題的抽象分析,還可以運(yùn)用狀態(tài)轉(zhuǎn)換圖使得問(wèn)題的解決變得更加形象直觀。
(2)類(lèi)比法。在講解一些抽象概念的時(shí)候,可以選取學(xué)生熟悉的實(shí)例,通過(guò)類(lèi)比的方法幫助學(xué)生進(jìn)行理解。比如,在課程的開(kāi)始部分介紹編譯過(guò)程時(shí),一般都會(huì)講到編譯的過(guò)程分為詞法分析、語(yǔ)法分析、語(yǔ)義分析及中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成等五個(gè)階段。學(xué)生要記住這五個(gè)階段比較容易,但是要理解分階段的依據(jù)則有些困難,這就需要回到編譯的定義。編譯是一種翻譯,將高級(jí)程序語(yǔ)言翻譯成低級(jí)程序語(yǔ)言。與之類(lèi)似的,外文翻譯也是一種翻譯,外文翻譯的過(guò)程可以分為五個(gè)步驟,包括識(shí)別句子中的單詞、分析句子的語(yǔ)法結(jié)構(gòu)、初步理解句子的含義并形成翻譯初稿、對(duì)譯文修飾、寫(xiě)出最后的譯文。學(xué)生在學(xué)習(xí)英語(yǔ)的時(shí)候經(jīng)常遇到這種翻譯,他們很熟悉外文翻譯的過(guò)程。將外文翻譯與編譯進(jìn)行類(lèi)比,可以幫助學(xué)生更深層次的理解編譯,并幫助他們理解編譯分為五個(gè)階段的原因。
除了上述教學(xué)方法外,在課堂教學(xué)中還應(yīng)當(dāng)安排一定數(shù)量的習(xí)題課討論課,以教學(xué)補(bǔ)償?shù)氖侄螌?duì)學(xué)生的知識(shí)薄弱點(diǎn)進(jìn)行針對(duì)性的訓(xùn)練。比如在文法和語(yǔ)言一章中有很多形式化的概念,文法、語(yǔ)言、推導(dǎo)、歸約、句子、句型、短語(yǔ)、直接短語(yǔ)、句柄、喬姆斯基文法分類(lèi)等等。學(xué)生大多數(shù)是第一次接觸到這些概念,理解起來(lái)有一定難度,往往會(huì)因此失去學(xué)習(xí)積極性。對(duì)此可以選擇一些與教學(xué)內(nèi)容相關(guān)的習(xí)題,集中進(jìn)行分析和討論,便于學(xué)生理解和掌握,并通過(guò)練習(xí)來(lái)鞏固和
訓(xùn)練學(xué)生對(duì)知識(shí)的運(yùn)用能力。而對(duì)于有窮自動(dòng)機(jī)的理論和應(yīng)用,則可以選擇一些從實(shí)際問(wèn)題中抽象出來(lái)的問(wèn)題進(jìn)行分析討論,鼓勵(lì)學(xué)生用所學(xué)的理論知識(shí)去分析和解決現(xiàn)實(shí)生活中遇到的問(wèn)題,激發(fā)學(xué)生學(xué)習(xí)探索的積極性和創(chuàng)造性。另外,對(duì)于課程中出現(xiàn)的一些概念和算法,教師可以組織學(xué)生課后搜集相關(guān)資料,課堂上集體討論并指導(dǎo)學(xué)生閱讀和分析,從而達(dá)到拓寬學(xué)生知識(shí)面、提高學(xué)生理解及應(yīng)用能力的目的。
4.2 實(shí)驗(yàn)教學(xué)
《編譯原理》課程兼具很強(qiáng)的理論性和實(shí)踐性,該課程的實(shí)驗(yàn)教學(xué)有助于加深學(xué)生對(duì)理論知識(shí)的理解,有助于培養(yǎng)學(xué)生的計(jì)算思維,并且對(duì)提高學(xué)生的算法設(shè)計(jì)分析和程序設(shè)計(jì)實(shí)現(xiàn)等能力具有重要的作用。《編譯原理》的實(shí)驗(yàn)課課時(shí)少,對(duì)學(xué)生的基礎(chǔ)知識(shí)及動(dòng)手能力要求高,這些原因造成實(shí)驗(yàn)效果不好。對(duì)此,從以下幾個(gè)方面考慮進(jìn)行調(diào)整:
(1)實(shí)驗(yàn)內(nèi)容:合理安排實(shí)驗(yàn)內(nèi)容,將實(shí)驗(yàn)分成詞法分析、語(yǔ)法分析、語(yǔ)義分析和目標(biāo)代碼生成四個(gè)模塊進(jìn)行,最后進(jìn)行一次綜合實(shí)驗(yàn)并演示。
(2)實(shí)驗(yàn)組織:將學(xué)生分為四人一組,每人負(fù)責(zé)四個(gè)模塊中的一個(gè),四個(gè)模塊依次進(jìn)行,最后小組進(jìn)行一次聯(lián)調(diào)并演示,這樣既保證了每個(gè)學(xué)生實(shí)驗(yàn)的獨(dú)立性,又培養(yǎng)了小組成員之間的協(xié)同合作精神。
(3)實(shí)驗(yàn)的考察驗(yàn)收:以往考察實(shí)驗(yàn)結(jié)果都是以實(shí)驗(yàn)報(bào)告的形式,學(xué)生寫(xiě)起來(lái)往往流于形式,因而達(dá)不到考察的效果,可以考慮實(shí)驗(yàn)報(bào)告以科研論文的形式給出,學(xué)生從而可以在寫(xiě)論文的過(guò)程中結(jié)合做實(shí)驗(yàn)的體會(huì)更深層次地理解《編譯原理》課程中的理論知識(shí)。
《編譯原理》課程是計(jì)算機(jī)專(zhuān)業(yè)的一門(mén)重要課程,要把這門(mén)課上好,達(dá)到培養(yǎng)學(xué)生計(jì)算思維的目的,需要教師不斷與時(shí)俱進(jìn),適時(shí)調(diào)整教學(xué)內(nèi)容和方法。本文提出了一些教學(xué)方法,在教學(xué)過(guò)程中取得了一定的效果,未來(lái)要想獲得好的教學(xué)效果,還需要對(duì)課程的教學(xué)方法和內(nèi)容改革付諸努力。
[1]張素琴,呂映芝,蔣維杜,戴桂蘭.編譯原理[M].北京:清華大學(xué)出版社,1998.
[2]Alfred V.Aho.Compilers:Principles,Techniques,and Tools(英文版第2版)[M].北京:機(jī)械工業(yè)出版社,2011.
[3]陳火旺,劉春林.程序設(shè)計(jì)語(yǔ)言編譯原理(第3版)[M].北京:國(guó)防科技大學(xué)出版社,2014.
[4]張世輝.編譯原理習(xí)題詳解與考研輔導(dǎo)[M].北京:國(guó)防科技大學(xué)出版社,2008.
[5]陳意云.編譯原理和技術(shù)(第2版)[M].合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,1997.
[6]蔣宗禮,姜守旭.編譯原理[M].北京:高等教育出版社,2010.
[7]蔣宗禮.形式語(yǔ)言與有窮自動(dòng)機(jī)理論(第3版)[M].北京:清華大學(xué)出版社,2013.
Discussion on the Teaching of Compiler Principle for Computer Major in Universities and Colleges
Jiang Yun
(Chongqing Technology and Business University,Chongqing 400067)
Compiler principle is a classic and core course in computer major.The content of the course is rich and abstract;as a result both the teaching and learning of the course are quite difficult.In this paper,the teaching of compiler principle for computer major in universities and colleges is discussed from three aspects,which are teaching goal,teaching content and teaching methods.
compiler principle;teaching content;teaching method
TP314-4
A
1008-6609(2016)07-0025-03
江赟,女,湖北黃岡人,講師,研究方向:生物計(jì)算及智能算法。
本課題受重慶市教育科學(xué)“十二五”規(guī)劃2015年度高等教育質(zhì)量提升專(zhuān)項(xiàng)課題,項(xiàng)目編號(hào):2015-GX-023;重慶工商大學(xué)校級(jí)教改項(xiàng)目,項(xiàng)目編號(hào):2015111。