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