于愛(ài)華
摘要:編譯原理是計(jì)算機(jī)學(xué)科的一門核心課程,因其理論性和實(shí)踐性較強(qiáng),內(nèi)容抽象,算法復(fù)雜成為計(jì)算機(jī)專業(yè)較難的一門課程。本文介紹了編譯原理授課的現(xiàn)狀,就存在的問(wèn)題,從明確學(xué)生的學(xué)習(xí)這門課的目標(biāo),提高學(xué)習(xí)興趣、精選教學(xué)內(nèi)容和加強(qiáng)實(shí)踐環(huán)節(jié)三個(gè)方面進(jìn)行了討論。
關(guān)鍵詞:編譯原理;教學(xué)方法
TP314-4
編譯原理是計(jì)算機(jī)相關(guān)專業(yè)的核心課程,是一門公認(rèn)比較難學(xué)的課程。通過(guò)學(xué)習(xí)編譯知識(shí),有助于學(xué)生從宏觀上把握編程語(yǔ)言;編譯技術(shù)涉及到計(jì)算機(jī)的系統(tǒng)結(jié)構(gòu)、指令集結(jié)構(gòu)以及相關(guān)的操作系統(tǒng),掌握編譯技術(shù)有助于更進(jìn)一步地理解計(jì)算機(jī)系統(tǒng);從軟件工程的角度來(lái)看,編譯器是一個(gè)很好的系統(tǒng)軟件,它所涉及的算法和技術(shù)可直接復(fù)用于軟件開(kāi)發(fā)的實(shí)踐[1]。
一、教學(xué)現(xiàn)狀
編譯原理課程的理論性和實(shí)踐性較強(qiáng),在該課程的學(xué)習(xí)過(guò)程中涉及到大量抽象的理論知識(shí),而實(shí)踐動(dòng)手環(huán)節(jié)的教學(xué)效果受制于對(duì)理論的理解程度。教學(xué)過(guò)程中,存在的問(wèn)題有以下幾個(gè)。
首先,學(xué)生對(duì)編譯原理課程不夠重視,缺乏學(xué)習(xí)動(dòng)力。大多數(shù)的同學(xué)認(rèn)為,編譯原理課程的學(xué)習(xí),與今后的就業(yè)沒(méi)有多大的聯(lián)系。而且就目前計(jì)算機(jī)領(lǐng)域的發(fā)展現(xiàn)狀而言,并不需要重復(fù)編寫(xiě)構(gòu)造編譯器;課程本身的難度較大,有同學(xué)反應(yīng),課堂上老師講授的知識(shí)可以理解,但是下課后往往想不起來(lái);從而導(dǎo)致學(xué)生在學(xué)生過(guò)程中,學(xué)習(xí)積極性不夠,動(dòng)力不足。
其次,編譯原理課程綜合性較強(qiáng),難度較大。涉及到的先修課程包括離散數(shù)學(xué)、程序設(shè)計(jì)基礎(chǔ)、算法與數(shù)據(jù)結(jié)構(gòu)、匯編語(yǔ)言、操作系統(tǒng)等,學(xué)生對(duì)這些先修課的基礎(chǔ)知識(shí)的掌握程度參差不齊,甚至于有些學(xué)生根本沒(méi)有掌握必要的基礎(chǔ)知識(shí);另外,該課程涉及的理論知識(shí)抽象,難以理解,如自動(dòng)機(jī)理論等,涉及到的算法復(fù)雜,不容易實(shí)現(xiàn),如語(yǔ)法分析階段的自下而上的分析算法等,對(duì)于編譯程序這個(gè)系統(tǒng)軟件,各模塊之間接口復(fù)雜,學(xué)生從整體上理解編譯程序也存在一定困難。
第三,實(shí)踐效果不理想。該課程的實(shí)踐涉及許多其他相關(guān)課程的知識(shí),因此,需要學(xué)生有較高的綜合運(yùn)用知識(shí)的能力,對(duì)于大多數(shù)同學(xué),實(shí)踐具有較大難度,對(duì)于基礎(chǔ)知識(shí)較差的同學(xué)來(lái)說(shuō),很難達(dá)到課程的要求。
二、教學(xué)思路
(一)明確課程學(xué)習(xí)目標(biāo)及其重要性
編譯原理課程理論性較強(qiáng),在講授過(guò)程中,理論性的知識(shí)是授課的重點(diǎn)和難點(diǎn)。因此,整個(gè)上課過(guò)程中要讓同學(xué)們明確學(xué)習(xí)該課程的意義,以及為什么要開(kāi)設(shè)該課程,即學(xué)習(xí)編譯原理的重要性,在整個(gè)課程的講授過(guò)程中,可以多采用啟發(fā)式教學(xué)方法,以期提高學(xué)生的學(xué)習(xí)興趣。編譯原理課程能夠提高學(xué)生計(jì)算機(jī)思維能力。所謂計(jì)算機(jī)思維能力指的是具有抽象化與形式化思維的能力,編譯器在設(shè)計(jì)過(guò)程中就運(yùn)用了計(jì)算機(jī)思維的思想與方法,對(duì)學(xué)生進(jìn)行計(jì)算機(jī)思維能力培養(yǎng)將有助于其更好地把握編譯原理的目標(biāo)[2]。另外,編譯技術(shù)應(yīng)用廣泛,如軟件系統(tǒng)安全、現(xiàn)有程序理解和軟件工程的逆向工程等方面。
(二)精選教學(xué)內(nèi)容
我們可以借鑒國(guó)內(nèi)外知名大學(xué)在編譯原理教學(xué)方面積累的寶貴的經(jīng)驗(yàn),如教學(xué)內(nèi)容、教學(xué)方式以及教學(xué)手段等。但是,對(duì)于應(yīng)用型普通本科院校而言,我們需要從自身的實(shí)際出發(fā),根據(jù)我們的學(xué)生水平、課時(shí)的多少以及學(xué)校的辦學(xué)特點(diǎn),對(duì)編譯原理的教學(xué)內(nèi)容適當(dāng)?shù)倪x擇,突出重點(diǎn),是學(xué)生能夠把握編譯技術(shù)的核心內(nèi)容?,F(xiàn)在多數(shù)同學(xué)的注意力集中在一些細(xì)節(jié)的算法上,因此教學(xué)內(nèi)容的選取原則是讓學(xué)生宏觀把握編譯原理和技術(shù)。
編譯原理主要包括五個(gè)階段的講解,即:詞法分析階段、語(yǔ)法分析階段、語(yǔ)義分析與中間代碼產(chǎn)生、代碼優(yōu)化和目標(biāo)代碼產(chǎn)生。
詞法分析階段,這部分內(nèi)容的主線是正規(guī)式與有限自動(dòng)機(jī)的相互轉(zhuǎn)換,以及將有限自動(dòng)機(jī)最小化。通過(guò)介紹正規(guī)式和有限自動(dòng)機(jī)的概念,為什么需要轉(zhuǎn)換,以及如何轉(zhuǎn)換,讓學(xué)生對(duì)有限自動(dòng)機(jī)的識(shí)別功能,有個(gè)更深刻的理解。
語(yǔ)法分析階段,該內(nèi)容包括自上而下語(yǔ)法分析和自下而上語(yǔ)法分析兩種。根據(jù)兩類分析方法的特點(diǎn),指出每種分析方法面臨的問(wèn)題或者說(shuō)所需解決的關(guān)鍵問(wèn)題,每種分析方法適用的文法環(huán)境,然后講解如何實(shí)現(xiàn)每種分析方法。這一部分主要講解兩種具體的分析方法,即LL(1)分析方法和LR(0)分析方法。
自上而下的分析方法關(guān)鍵的問(wèn)題是,非終結(jié)符有多個(gè)候選時(shí),如何選擇的問(wèn)題,因此相關(guān)知識(shí)點(diǎn)較多,如消除遞歸(包括直接和間接)、消除回溯和求FIRST集FOLLOW集。對(duì)于這部分知識(shí),學(xué)生容易把注意力集中在以上的具體算法上,所以,我們?cè)诮虒W(xué)中,需要重點(diǎn)講述LL(1)分析方法的判別和預(yù)測(cè)分析表的構(gòu)造,預(yù)測(cè)分析程序的構(gòu)造和實(shí)現(xiàn)過(guò)程??梢圆捎冒咐虒W(xué)法,以一個(gè)具體的小程序?yàn)槔?,講解預(yù)測(cè)分析程序的實(shí)現(xiàn)過(guò)程,增強(qiáng)學(xué)生的直觀感。
自下而上的分析方法關(guān)鍵的問(wèn)題是,尋找句柄。對(duì)于上下文無(wú)關(guān)文法的分析,LR分析方法是一種高效的方法,包括:LR(0)、SLR、規(guī)范LR和LALR方法。LR分析表的生成算法較為復(fù)雜,因此講解時(shí)重點(diǎn)應(yīng)放在LR實(shí)現(xiàn)的關(guān)鍵問(wèn)題,即如何確定棧頂符號(hào)是否構(gòu)成句柄。對(duì)于這部分內(nèi)容,重點(diǎn)讓學(xué)生掌握LR(0)的分析方法。因?yàn)镾LR(1)已經(jīng)能夠適應(yīng)大多數(shù)的文法,所以規(guī)范LR和LALR方法部分,只需要讓學(xué)生了解即可。
(三)加強(qiáng)實(shí)踐環(huán)節(jié)
編譯原理是一門理論性和實(shí)踐性較強(qiáng)的課程。理論知識(shí)抽象難懂,我們可以通過(guò)實(shí)踐,使學(xué)生加深對(duì)理論知識(shí)的理解。在實(shí)踐教學(xué)中,我們可以從基本的驗(yàn)證試驗(yàn)開(kāi)始,讓學(xué)生循序漸進(jìn)的學(xué)習(xí),避免一開(kāi)始就要求學(xué)生完成很難的任務(wù),打擊學(xué)生的信息和積極性。試驗(yàn)內(nèi)容方面,比如對(duì)于詞法分析,讓學(xué)生先練習(xí)LEX的使用,之后設(shè)計(jì)編制調(diào)試一個(gè)具體的語(yǔ)法分析程序,要求功能簡(jiǎn)單,能把源程序中的關(guān)鍵字、標(biāo)識(shí)符、運(yùn)算符、常量和分隔符等識(shí)別出來(lái)即可,旨在加深學(xué)生對(duì)詞法分析基本原理的理解。最后可以交給學(xué)生一個(gè)綜合性的試驗(yàn)任務(wù),讓學(xué)生將零散的知識(shí)點(diǎn)串接起來(lái),形成一個(gè)整體概念。
三、結(jié)束語(yǔ)
《編譯原理》課程是計(jì)算機(jī)專業(yè)的核心課程之一,針對(duì)當(dāng)前編譯原理教學(xué)中存在的問(wèn)題,就如何提高學(xué)生學(xué)習(xí)興趣、合理安排教學(xué)內(nèi)容等方面作了一些研究和探索。
參考文獻(xiàn):
[1]何炎祥,伍春香.計(jì)算機(jī)專業(yè)不需要開(kāi)設(shè)編譯原理課程嗎?[J].計(jì)算機(jī)教育,2009,(4):61-62
[2]王福寧,李娜,閆愛(ài)平.編譯原理課程教學(xué)改革研究綜述[J].創(chuàng)新教育,2014(35):87