沈 睿 朱學(xué)君
(1.河西學(xué)院 信息技術(shù)與傳媒學(xué)院,甘肅 張掖 734000;2.河西學(xué)院 信息技術(shù)中心,甘肅 張掖 734000)
從1946年第一臺(tái)計(jì)算機(jī)產(chǎn)生至今,計(jì)算機(jī)的發(fā)展僅僅過(guò)去了不到70年的時(shí)間,從最初單一的僅由0和1組成的機(jī)器語(yǔ)言發(fā)展到現(xiàn)在的多種高級(jí)語(yǔ)言,編譯技術(shù)起了決定性的作用,正是編譯技術(shù)迅速、成熟的發(fā)展,人們才能擺脫繁瑣的機(jī)器語(yǔ)言,走進(jìn)和自然語(yǔ)言相近的高級(jí)語(yǔ)言時(shí)代。
《編譯原理》課程主要是研究基于形式語(yǔ)言理論的編譯技術(shù),是計(jì)算機(jī)專業(yè)的專業(yè)核心課程之一,課程主要介紹編譯程序是如何將高級(jí)語(yǔ)言程序翻譯成機(jī)器能夠執(zhí)行的低級(jí)語(yǔ)言程序的工作原理和方法,編譯程序經(jīng)歷的各個(gè)階段,以及這些階段的功能和構(gòu)造?!毒幾g原理》課程的先行課程主要有數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、計(jì)算機(jī)組成原理、線性代數(shù)和程序設(shè)計(jì)基礎(chǔ)等,該課程的目的是在于系統(tǒng)地向?qū)W生講述編譯系統(tǒng)的結(jié)構(gòu)、工作流程以及編譯程序各組成部分的設(shè)計(jì)原理和實(shí)現(xiàn)技術(shù),使學(xué)生通過(guò)本課程的學(xué)習(xí),既掌握編譯理論和方法方面的基本知識(shí),同時(shí)也獲得設(shè)計(jì)、分析和移植編譯程序方面的初步能力,進(jìn)而提高學(xué)生設(shè)計(jì)多種軟件的素質(zhì)。[1]
《編譯原理》課程是計(jì)算機(jī)專業(yè)中公認(rèn)的難教難學(xué)課,課程的理論性強(qiáng),抽象性高,但是鑒于其在計(jì)算機(jī)中起的決定性作用,各個(gè)高校的計(jì)算機(jī)專業(yè)都將其列為非常重要的專業(yè)課,而且在研究生期間還繼續(xù)開(kāi)設(shè)該課程。課程不但涉及了形式語(yǔ)言理論、自動(dòng)機(jī)、編譯技術(shù)等抽象的內(nèi)容,而且也是程序設(shè)計(jì)、算法、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)等知識(shí)的綜合體現(xiàn)。課程幫助學(xué)生了解計(jì)算機(jī)的工作過(guò)程,認(rèn)識(shí)計(jì)算機(jī)信息處理的實(shí)質(zhì),而且其中的一些算法也很經(jīng)典,通過(guò)《編譯原理》課程的學(xué)習(xí),可以提高學(xué)生對(duì)計(jì)算機(jī)系統(tǒng)的總體認(rèn)識(shí),對(duì)理解算法、程序設(shè)計(jì)思想和編寫(xiě)更高效的代碼具有重要的影響。
《編譯原理》課程是一門理論性和技術(shù)性都非常強(qiáng)的課程,內(nèi)容豐富而且抽象,而且不像一些應(yīng)用類課程,除非是專業(yè)從事編譯技術(shù)的人員,否則對(duì)于學(xué)生而言無(wú)實(shí)際應(yīng)用價(jià)值,缺乏學(xué)習(xí)的積極性,而且學(xué)生在學(xué)習(xí)的過(guò)程中,容易忽略各章之間的連貫性,僅僅是掌握了一些獨(dú)立的算法,分離的知識(shí)點(diǎn),抓不住重點(diǎn),分不清主次。要想取得良好的教學(xué)效果,首先要讓學(xué)生認(rèn)識(shí)到課程的重要性,再配合以合理的教學(xué)方法和手段。因此,在《編譯原理》課程的教學(xué)中,可以采取多種教學(xué)方式和教學(xué)模式,較好的完成教學(xué)效果。
(1)講授式教學(xué)法:課程理論性很強(qiáng)很多多,講授法就是首選的最直觀的的方法。但編譯技術(shù)中涉及了大量的抽象概念,所以填鴨式的講授法不能取得好的教學(xué)效果。對(duì)于抽象的理論,要盡量采用形象、生動(dòng)、直觀、具體的講授方式,充分調(diào)動(dòng)學(xué)生的積極性和興趣,注重知識(shí)點(diǎn)的連貫和系統(tǒng)性,引導(dǎo)學(xué)生的思維,注重學(xué)生信息反饋,教學(xué)相長(zhǎng)。比如說(shuō),講到編譯系統(tǒng)的組成和功能,為了將之后的詞法分析、語(yǔ)法分析、語(yǔ)義分析、代碼優(yōu)化、目標(biāo)代碼生成等階段連貫起來(lái),可以在講授的過(guò)程中制作一些動(dòng)畫(huà),將各個(gè)階段連貫起來(lái)?;蛘邔⒕幾g過(guò)程和英翻漢的過(guò)程做對(duì)比講解,英翻漢首先要搞清楚各個(gè)單詞的含義,也就是詞法分析過(guò)程,然后將句子的結(jié)構(gòu)劃分清楚,就是語(yǔ)法分析,接下來(lái)給出句子的意思,即語(yǔ)義分析,然后注意前后順序,將句子的中文含義給的更貼合中文習(xí)慣,即代碼優(yōu)化,最后給出完整、準(zhǔn)確的中文,就是目標(biāo)代碼生成了。這樣的講授方式,學(xué)生更能夠接受,而且通過(guò)例子,學(xué)生充分理解了什么是編譯過(guò)程。
(2)啟發(fā)式教學(xué)法:這種教學(xué)方法主要是教師根據(jù)教學(xué)任務(wù)和學(xué)生的實(shí)際情況,以啟發(fā)學(xué)生思考為核心,調(diào)動(dòng)學(xué)生的主動(dòng)性和積極性,促進(jìn)學(xué)生主動(dòng)學(xué)習(xí)。對(duì)于課程中出現(xiàn)的大量算法,可以采用這種教學(xué)方式,比如講到文法的二義性,可以不要直接講授定義,可以給出一個(gè)二義性文法,一個(gè)同樣的句型,讓學(xué)生自己推導(dǎo),畫(huà)出語(yǔ)法樹(shù),由于推導(dǎo)習(xí)慣和分析角度的問(wèn)題,肯定會(huì)有不同結(jié)果,讓學(xué)生自己分析,為什么會(huì)產(chǎn)生不同結(jié)果,產(chǎn)生不同結(jié)果會(huì)對(duì)句型分析造成的影響等等,然后再引出二義性的概念,通過(guò)學(xué)生自己的分析,得出了和二義性相關(guān)的結(jié)論,不但提高了學(xué)生的積極性,還加深了對(duì)抽象理論的理解。
(3)案例教學(xué)法:采用具體的案例,在講解案例的過(guò)程中,將知識(shí)點(diǎn)貫穿其中,將抽象的問(wèn)題具體化。案例教學(xué)主要是鼓勵(lì)學(xué)生主動(dòng)思考,變注重知識(shí)為注重能力,重視學(xué)生和老師、學(xué)生和學(xué)生之間的雙向交流。在編譯原理的學(xué)習(xí)過(guò)程中,預(yù)測(cè)分析是一種很重要的分析技術(shù),但是學(xué)生常常將理論和應(yīng)用聯(lián)系不起來(lái)。因此,在教學(xué)過(guò)程中,可以先給出一個(gè)具體的預(yù)測(cè)分析表,根據(jù)這個(gè)分析表做相應(yīng)的語(yǔ)法分析,也就是先給出預(yù)測(cè)分析表的應(yīng)用。然后根據(jù)文法,討論如何產(chǎn)生該分析表。通過(guò)選擇和教學(xué)內(nèi)容相符的案例,配以形象、直觀、生動(dòng)的授課形式,易于學(xué)生接受和理解理論基礎(chǔ),并將理論應(yīng)用與實(shí)踐中,進(jìn)一步深化和鞏固專業(yè)知識(shí)。
(4)對(duì)比教學(xué)法:通過(guò)對(duì)一些知識(shí)點(diǎn)的比較,尋找知識(shí)點(diǎn)間的異同。這種方法促使學(xué)生多元化解讀,多角度思考,激發(fā)討論,區(qū)分異同,知識(shí)結(jié)構(gòu)清晰,學(xué)生就能更好的理解和掌握,不會(huì)造成知識(shí)點(diǎn)混亂。比如講到有窮狀態(tài)自動(dòng)機(jī)中,確定(DFA)和非確定(NFA)兩種時(shí),先講DFA的生成和運(yùn)行,然后給一個(gè)NFA的文法,讓學(xué)生構(gòu)造FA,然后運(yùn)行,查看結(jié)果,總結(jié)兩種FA的不同,闡述不同的FA運(yùn)行時(shí)不同的結(jié)果,然后在文法中查找根源,總結(jié)為何文法會(huì)產(chǎn)生兩種不同的FA,從而,掌握什么樣的文法會(huì)產(chǎn)生什么樣的FA,以及兩種FA的異同。通過(guò)對(duì)比教學(xué),學(xué)生能夠充分理解兩個(gè)相近的知識(shí)點(diǎn),而且不會(huì)產(chǎn)生混淆。
《編譯原理》課程不但要求學(xué)生掌握編譯系統(tǒng)的結(jié)構(gòu)和工作流程,還要培養(yǎng)學(xué)生設(shè)計(jì)編譯程序的基本能力,而且其中還有許多的經(jīng)典算法,通過(guò)實(shí)踐,不但能夠加深學(xué)生對(duì)抽象理論的理解,還能提高學(xué)生分析、設(shè)計(jì)軟件的能力,培養(yǎng)學(xué)生的專業(yè)能力,提高學(xué)生的專業(yè)素質(zhì)。
在實(shí)踐過(guò)程中,大部分學(xué)校的實(shí)踐環(huán)節(jié)都存在或多或少的問(wèn)題。一些學(xué)校不重視實(shí)踐課程,甚至沒(méi)有實(shí)踐環(huán)節(jié),認(rèn)為現(xiàn)有的編譯系統(tǒng)很成熟,不存在再開(kāi)發(fā)的問(wèn)題,而且以后從事專業(yè)的編譯技術(shù)的人很少,沒(méi)必要開(kāi)設(shè)。還有一些實(shí)驗(yàn)設(shè)計(jì)不合理,只是將一個(gè)一個(gè)獨(dú)立的算法給出,讓學(xué)生編寫(xiě)一些小型的程序,不能夠體現(xiàn)知識(shí)的系統(tǒng)性和連貫性。
針對(duì)以上的情況,要進(jìn)行實(shí)踐改革,首先要重視實(shí)踐環(huán)節(jié)的教學(xué),認(rèn)清通過(guò)實(shí)踐不但可以加深學(xué)生對(duì)理論的理解,還可以讓學(xué)生更深層次的了解編譯程序的構(gòu)造和設(shè)計(jì),關(guān)鍵是培養(yǎng)和提高了學(xué)生的編程能力,培養(yǎng)了學(xué)生分析軟件和設(shè)計(jì)軟件的能力。其次要合理的設(shè)計(jì)實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)方案。在設(shè)計(jì)實(shí)驗(yàn)的過(guò)程中,要注重知識(shí)的連貫性,好多學(xué)生反映不能將編譯原理中的各個(gè)模塊統(tǒng)一在一起,掌握的知識(shí)仍然是分離的。在實(shí)驗(yàn)中注重連貫性,就可以解決這一問(wèn)題。例如在詞法分析模塊,第一部分是先將文法以合理的結(jié)構(gòu)存放在計(jì)算機(jī)內(nèi),然后根據(jù)文法生成相應(yīng)的FA,如果是NFA要將其確定化,轉(zhuǎn)為DFA。第二部分就可以運(yùn)行FA了,根據(jù)運(yùn)行的結(jié)果,識(shí)別出一個(gè)一個(gè)的單詞。第三部分,將識(shí)別出的單詞構(gòu)造成屬性字序列。通過(guò)這三部分的實(shí)驗(yàn),不但完成了詞法分析程序的構(gòu)造,也將理論中講解的各個(gè)部分聯(lián)系起來(lái),形成知識(shí)體系,幫助學(xué)生理解和掌握了詞法分析的功能和程序構(gòu)造。還要注意合理的安排實(shí)驗(yàn)時(shí)間,編譯原理不是每節(jié)課都有實(shí)踐部分,有些學(xué)校統(tǒng)一的將實(shí)踐安排在課程最后,這樣可能會(huì)造成理論和實(shí)踐的脫節(jié)。最好是能夠在一個(gè)模塊結(jié)束后,該模塊的相關(guān)實(shí)踐隨之完成。這樣能夠讓實(shí)踐和理論相互促進(jìn),強(qiáng)調(diào)知識(shí)點(diǎn)之間的邏輯聯(lián)系,幫助學(xué)生更好的掌握知識(shí)。最后要有合理的評(píng)價(jià)機(jī)制,將實(shí)踐部分放入考核,每次實(shí)踐要求學(xué)生給出實(shí)現(xiàn)的代碼,并提交相應(yīng)的文檔,教師根據(jù)代碼、結(jié)果和文檔給出實(shí)踐成績(jī),將其列入最后的總評(píng)成績(jī),從而激發(fā)學(xué)生的主動(dòng)性和積極性。通過(guò)實(shí)驗(yàn)教學(xué)改革,不但鞏固了學(xué)生的理論知識(shí),而且引導(dǎo)他們將理論應(yīng)用于實(shí)踐,同時(shí)也有助于學(xué)生自身編程水平和算法設(shè)計(jì)能力的提高,為下一步的專業(yè)學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。[2]
《編譯原理》課程在培養(yǎng)學(xué)生的抽象思維、邏輯思維和編程能力方面都起著積極促進(jìn)的作用,要抓住該課程的重點(diǎn),分清主次,將知識(shí)點(diǎn)連貫起來(lái),充分采用多種教學(xué)模式和方法將抽象的內(nèi)容形式化,通過(guò)實(shí)踐再將理論知識(shí)應(yīng)用于實(shí)踐,激發(fā)學(xué)生的積極性,促進(jìn)學(xué)生自主學(xué)習(xí),讓學(xué)生掌握知識(shí)和技能,學(xué)會(huì)思考,培養(yǎng)創(chuàng)新精神,提高對(duì)計(jì)算機(jī)系統(tǒng)的總體認(rèn)識(shí)。
[1]吳其林.“編譯原理”課程的教學(xué)探討[J].電腦知識(shí)與技術(shù),2012,1.
[2]孟丹.編譯原理實(shí)驗(yàn)教學(xué)分層案例化改革探索[C]//北京高教學(xué)會(huì)實(shí)驗(yàn)室工作研究會(huì),2010年學(xué)術(shù)研討會(huì)論文集.2010,12.
[3]崔少國(guó).“編譯原理”課程教學(xué)方法的探索與實(shí)踐[J].福建電腦,2012,1.
[4]張艷.“編譯原理”課程建設(shè)的新思考[J].中國(guó)電力教育,2012,8.