李洪霞
摘 要:針對(duì)普通高校本科生編譯原理課程的教學(xué),從教學(xué)目的、教學(xué)內(nèi)容以及教學(xué)中的問(wèn)題三個(gè)方面對(duì)其進(jìn)行了分析和討論,并給出了相應(yīng)的解決方案。
關(guān)鍵詞:編譯原理;編譯過(guò)程;教學(xué)目的;教學(xué)內(nèi)容
DOI:10.16640/j.cnki.37-1222/t.2015.24.265
《編譯原理》是計(jì)算機(jī)及相關(guān)專業(yè)的一門重要專業(yè)課程,它對(duì)促進(jìn)學(xué)生理解編譯過(guò)程及技術(shù),增強(qiáng)學(xué)生的程序設(shè)計(jì)及實(shí)現(xiàn)能力,起著重要的作用。但它同時(shí)也是一門難學(xué)的課程,其主要體現(xiàn)在先導(dǎo)課程多、理論性強(qiáng)、對(duì)實(shí)踐階段要求高等方面。因此如何教好這門課程是需要思考的問(wèn)題。
同時(shí),編譯原理課程在普通高校本科生、重點(diǎn)高校本科生以及碩士研究生中均有開(kāi)設(shè),其教學(xué)目的、教學(xué)內(nèi)容以及教學(xué)方法應(yīng)該有所區(qū)別。本文針對(duì)普通高校本科生,就如何開(kāi)展編譯原理課程的教學(xué)展開(kāi)討論。
1 教學(xué)目的的確定
教學(xué)目的是一門課程的核心,是開(kāi)展教學(xué)工作的前提和基礎(chǔ)。編譯原理作為一門計(jì)算機(jī)及相關(guān)專業(yè)的專業(yè)核心課程,在不同層次的學(xué)生之間均有開(kāi)設(shè)。但針對(duì)學(xué)生的層次不同,應(yīng)設(shè)立不同的教學(xué)目標(biāo)。
針對(duì)普通高校本科生,未來(lái)的發(fā)展多定位在技術(shù)人員。因此,培養(yǎng)方向應(yīng)以“工程性”和“應(yīng)用性”為主[1]。由此,針對(duì)普通高校本科生,可設(shè)定為以學(xué)習(xí)基本原理和方法為手段,理論聯(lián)系實(shí)際,以培養(yǎng)學(xué)生計(jì)算機(jī)思維[2]、提高分析解決問(wèn)題和理論聯(lián)系實(shí)際的能力為目標(biāo)來(lái)進(jìn)行教學(xué)。下文中的學(xué)生,如不特別說(shuō)明,均指普通高校本科生。
基本原理和方法的學(xué)習(xí):編譯原理課程中涉及到一些非?;A(chǔ)和重要的原理和和技術(shù),如正規(guī)式和正規(guī)文法以及狀態(tài)自動(dòng)機(jī)的等價(jià)性,LR分析法的正確性與合理性;用狀態(tài)自動(dòng)機(jī)(DFA或NFA)來(lái)進(jìn)行單詞的識(shí)別、用三地址代碼進(jìn)行中間代碼的表示、基本結(jié)構(gòu)的中間代碼生成等。通過(guò)這些內(nèi)容的學(xué)習(xí),可以對(duì)程序設(shè)計(jì)有深入的掌握和理解。同時(shí),編譯原理是一門理論性和實(shí)踐性都很強(qiáng)的課程,如何將源語(yǔ)言轉(zhuǎn)換成目標(biāo)語(yǔ)言,除了掌握其技術(shù)理論外,還需能夠?qū)⒃闯绦颍ㄈ缇唧w的C語(yǔ)言程序),轉(zhuǎn)換成目標(biāo)代碼(如匯編代碼)的形式。因此,理論的學(xué)習(xí)必須與具體的源語(yǔ)言、目標(biāo)語(yǔ)言以及目標(biāo)機(jī)聯(lián)系起來(lái),理論與實(shí)踐結(jié)合的非常緊密。
分析解決問(wèn)題能力的提高:在編譯原理課程的學(xué)習(xí)中,給出了多種問(wèn)題的解決方法。如在語(yǔ)法分析問(wèn)題上,首先提出問(wèn)題:如何判斷一個(gè)句子是否是合規(guī)的句子。然后用自頂向下和自底向上兩種方法對(duì)該問(wèn)題進(jìn)行了分析解決。類似地,在中間代碼生成部分,給出遞歸求解中間代碼的方法。這些常用和基本的問(wèn)題解決方案對(duì)提高學(xué)生分析解決問(wèn)題的能力有所幫助。
2 教學(xué)內(nèi)容的選擇
現(xiàn)階段,國(guó)內(nèi)外編譯原理的教材內(nèi)容不斷更新,像并行編譯、形式語(yǔ)言與自動(dòng)機(jī)等內(nèi)容都成為編譯原理課程的一部分編寫(xiě)進(jìn)了教材[3]。由于課時(shí)的有限性,應(yīng)根據(jù)學(xué)生的實(shí)際需求,以通過(guò)對(duì)編譯技術(shù)的學(xué)習(xí),提高學(xué)生編程能力為根本。具體來(lái)講,即通過(guò)對(duì)給定問(wèn)題進(jìn)行分析,能夠采用合適的結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)、運(yùn)用合適的模型來(lái)描述問(wèn)題,然后提高運(yùn)用語(yǔ)言編寫(xiě)代碼的能力,快速發(fā)現(xiàn)并糾正程序中錯(cuò)誤的能力,及編寫(xiě)高質(zhì)量程序代碼的能力。
在程序編寫(xiě)部分,除了對(duì)程序語(yǔ)言的理解和掌握外,主要就是對(duì)編譯技術(shù)的掌握。其重點(diǎn)內(nèi)容應(yīng)包括:詞法分析,語(yǔ)法分析,語(yǔ)義分析與中間代碼生成,中間代碼優(yōu)化及目標(biāo)代碼生成這幾個(gè)主要的環(huán)節(jié)。其它內(nèi)容,在不影響課程進(jìn)展的情況下,可以考慮略講或直接省略。如在自下而上語(yǔ)法分析中,像算符優(yōu)先分析可以不講或略講。在LR分析法中,具體內(nèi)容涉及到LR分析器及LR(0)、SLR、規(guī)范LR及 LALR分析表的構(gòu)造方法。此處是語(yǔ)法分析中的難點(diǎn),如果逐一講解必然占用大量課時(shí)。故可在LR分析器的基礎(chǔ)上,以LR(0)為例來(lái)對(duì)自下而上語(yǔ)法分析進(jìn)行講解。然后,在此基礎(chǔ)上進(jìn)一步引申,如項(xiàng)目集中含有沖突項(xiàng)目(如同時(shí)含有移進(jìn)和歸約項(xiàng)目),應(yīng)該如何處理。這些供有興趣的同學(xué)進(jìn)一步探討。
類似地,對(duì)屬性文件及語(yǔ)法制導(dǎo)翻譯,并行編譯的內(nèi)容,以及形式語(yǔ)言與自動(dòng)機(jī)的知識(shí)點(diǎn),采用點(diǎn)到為止的方式,僅提出相應(yīng)的問(wèn)題,不做細(xì)致分析講解。
同時(shí),由于編譯原理的先導(dǎo)課程較多,如以C語(yǔ)言為源語(yǔ)言,匯編語(yǔ)言為機(jī)器代碼為例進(jìn)行課程分析,對(duì)涉及到的相關(guān)知識(shí)及內(nèi)容應(yīng)適當(dāng)加以回顧,使學(xué)生能將精力集中放到編譯技術(shù)的理解上,不因先導(dǎo)課程中知識(shí)點(diǎn)的不理解而影響對(duì)當(dāng)前知識(shí)的掌握。
3 教學(xué)過(guò)程中的注意事項(xiàng)
編譯原理課程是理論性強(qiáng)的課程,也比較抽象,如何讓學(xué)生能夠理解并運(yùn)用其中的原理和技術(shù),從而來(lái)提高編程能力呢?實(shí)例引用和與實(shí)踐結(jié)合就是課程講授中非常重要的兩個(gè)方面。
(1)實(shí)例引用貫穿始終。如在編譯過(guò)程概述中,提到編譯過(guò)程的各個(gè)階段,詞法、語(yǔ)法及語(yǔ)義分析等概念,學(xué)生一時(shí)難以接受和理解。此時(shí)可舉實(shí)例進(jìn)行講解,比如以賦值語(yǔ)句:area=pi*r^2為例,講解如何將本條語(yǔ)句由源程序通過(guò)詞法、語(yǔ)法等步驟,逐步轉(zhuǎn)換成目標(biāo)代碼并加以執(zhí)行的。從而使學(xué)生對(duì)整個(gè)編譯過(guò)程有一個(gè)直觀的印象。
同樣,在中間代碼生成階段,舉例說(shuō)明是如何將三種基本結(jié)構(gòu)的語(yǔ)句,如順序結(jié)構(gòu)語(yǔ)句(如賦值語(yǔ)句)、控制結(jié)構(gòu)語(yǔ)句(如if…then, if…then…else語(yǔ)句)、循環(huán)結(jié)構(gòu)語(yǔ)句(while和for語(yǔ)句)等,分別用具體的源語(yǔ)言程序來(lái)說(shuō)明,講解是如何利用語(yǔ)義分析技術(shù)將其翻譯成中間代碼(如三元式)的。
(2)與實(shí)踐相結(jié)合。上面提到以實(shí)例來(lái)對(duì)相關(guān)的技術(shù)加深理解。而在實(shí)踐應(yīng)用方面,只有將理論與技術(shù)真正應(yīng)用于實(shí)踐,編譯技術(shù)的學(xué)習(xí)才有意義。如在上機(jī)實(shí)習(xí)方面,可通過(guò)C語(yǔ)言構(gòu)造一個(gè)小的編譯系統(tǒng)。可以分別利用flex和bison等工具構(gòu)造詞法、語(yǔ)法、語(yǔ)義分析器,并在此基礎(chǔ)上構(gòu)造一個(gè)小的編譯系統(tǒng)。使得詞法分析可識(shí)別關(guān)鍵字、標(biāo)識(shí)符以及各種符號(hào),語(yǔ)法分析可進(jìn)行語(yǔ)法的判斷,語(yǔ)義分析器可進(jìn)行一些數(shù)學(xué)運(yùn)算,而構(gòu)造的編譯系統(tǒng)可以將C語(yǔ)言的一個(gè)子集翻譯成匯編語(yǔ)言的形式。
4 小結(jié)
針對(duì)普通高校計(jì)算機(jī)專業(yè)及相關(guān)專業(yè)本科生,從教學(xué)目的、教學(xué)內(nèi)容、教學(xué)中出現(xiàn)的問(wèn)題三個(gè)方面對(duì)編譯原理課程的教學(xué)進(jìn)行了分析討論。希望通過(guò)對(duì)這幾個(gè)方面的討論,可以使學(xué)生能夠?qū)幾g過(guò)程有更深入的理解,并使其編程能力得到進(jìn)一步的提高。
參考文獻(xiàn):
[1]張昱.“編譯原理”課程的教學(xué)內(nèi)容選擇的探討[J].計(jì)算機(jī)教育,2009(18):143-146.
[2]蔣宗禮.“編譯原理”課程與專業(yè)能力培養(yǎng)[J].計(jì)算機(jī)教育,2009(21):4-6.endprint