文章編號:1962-5913(2008)11-0049-02
摘要:本文介紹了我院以培養專業素質為目標,從教學內容、授課方式、實驗設計等方面對“編譯原理”課程教學進行的改革,并介紹了教學效果。
關鍵詞:編譯原理;教學改革;實驗設計
中圖分類號:G642
文獻標識碼:B
“編譯原理”是計算機專業的一門核心課程,在計算機學科的教學體系中占有重要的地位。編譯技術包含的算法和思想比較特殊,理論性較強,抽象度也較高。學習編譯程序的構造原理和實現技術,不僅可以掌握編譯程序本身的實現技術,同時也能夠提高對程序設計語言的理解,提高語言的設計能力,提高元級程序的設計能力,提高開發大型軟件的能力,能夠培養學生的抽象思維能力和形式化描述能力[1]。但由于涉及的理論非常多,而且都是學生在學習其他課程時沒有遇到的,所以教學效果一直不理想。
1理論教學
我院在教學過程中綜合運用了任務驅動法[2]和案例教學法[3]兩種方法,達到了不錯的效果。但“編譯原理”課程理論性非常強,內容也較多,若在短短一個學期將其全部內容不論巨細都囊括其中是非常不現實的,而且教學效果也一定不會理想。這就需要在教學內容、教學手段方面做一些工作。
1.1精選授課內容
通常“編譯原理”都是按照編譯的六個階段進行組織的:詞法分析、語法分析、語義分析、中間代碼生成、中間代碼優化,以及目標代碼生成。但在教學內容方面,詞法分析部分注重正規表達式及其與DFA的轉換,而忽略DFA的識別功能;語法分析部分對自上而下、自下而上語法分析方法逐一進行介紹;中間代碼部分過多描述,都使得學生在學習中分不清主次,造成混亂。因此在講授內容方面,需要作適當的精選,突出重點,使學生從編譯技術核心的內容入手。
詞法分析方面,正規表達式、確定的優先自動機的概念及兩者之間的轉換固然是重要的理論基礎,但需要強調的是使用DFA進行單詞的識別是詞法分析階段的最終目標。正規表達式是對單詞的形式化的描述方法,如何讓計算機能識別這種形式化的描述方法,就需要將其進行轉換。此部分在實驗題目的設計中也要有所體現。先讓學生知道為什么,再講授怎么做,帶著問題進行學習。
語法分析部分,包括兩大類的方法:自上而下語法分析和自下而上語法分析。首先根據兩類分析方法的特點,找出每類分析方法待解決的關鍵問題,然后根據關鍵問題,介紹每種分析方法是如何實現的。
自上而下語法分析需要解決的關鍵問題是,在推導過程中若待替換的非終結符對應不同的產生式右部,應該如何選擇產生式。LL(1)分析方法和遞歸下降子程序法都是通過計算每個產生式的Select集來解決這個關鍵問題。對于遞歸下降子程序,不但應該介紹其構造方法,還應該加入使用其進行語法分析的過程,如圖1所示。這樣才能加深學生的認識,使學生真正理解這種方法。

自下而上語法分析方法需要解決的關鍵問題是尋找句柄。算符優先分析方法通過尋找素短語來尋找句柄,而LR分析方法通過尋找可歸約活前綴來尋找句柄。有了這兩種指導思想,學生在學習過程中就不會覺得無所是從。另外,在LR系列分析方法中,SLR(1)已經能夠適應大多數的文法,所以在講授過程中,僅將LR(1)方法的概念提出,而不做進一步深層次的介紹,這樣的思路,使學生不必陷入很深的原理中而忽略學習原理的目的。
其他章節方面,我們也對可有可無的周邊內容進行了刪減,只保留與編譯技術思路大體一致的內容。通過對授課內容進行優化、精選,使學生在學習過程中總是從編譯技術的角度去理解各部分的內容,而不是僅學到孤立的知識點和原理。
1.2選擇適當的教輔材料
編譯技術各部分原理都比較深奧,在課堂教學中除使用板書、多媒體教學等常規方式外,選擇適當的教輔材料對學生理解和掌握原理也非常有幫助。
例如,在使用LR語法分析方法中,根據文法構造識別活前綴的DFA、根據識別活前綴的DFA構造Action表和Goto表,以及使用Action表和Goto表進行分析的這一系列過程,使用常規的課堂教學手段將原理講解清楚,然后使用教輔軟件舉例將各部分的構造進行動態演示。在04級教學過程中,此部分的軟件使用網上的材料,而教學完成后,讓學生結合自己的理解,針對課堂教學中他們對使用軟件的認識自己設計編寫教輔軟件。這部分內容也作為實驗環節的一項內容進行考核。而05屆學生在學習時就采用上屆學生編寫的教輔軟件,學習完成后再進行設計,以此類推。通過這種方式,一方面利用多種方式講授了原理知識,另一方面激發了學生的學習熱情及設計能力,使他們在不斷的學習中進步。
1.3結合實際程序講授原理
編譯原理課程的教學,除了在實驗方面需要體現理論聯系實踐,在原理講授過程中結合學生在編寫程序過程中容易出現的編譯錯誤進行講授,也會使學生不僅在編譯原理方面,更在程序設計方面加深理解。
例如,在介紹運行時存儲空間分配部分,在介紹棧式存儲空間分配時,結合C++語言中參數的三種形式:值、指針、引用,進行介紹,使學生不僅理解了編譯技術此部分的原理,更加深了對程序設計語言的理解。
另外,在介紹編譯各個階段時,結合實際程序在編譯中的報錯信息,讓學生理解編譯程序的運行原理。
2實驗環節
實驗環節在編譯原理的教學過程中占有舉足輕重的位置,而在以提高素質為目標的教學活動中,實驗環節的設計就顯得額外重要。在實際教學中,實驗的設置從三個角度來進行,通過完成這方面的實驗,學生對編譯技術就有了全方位的認識。
首先,是驗證性的實驗。在課程初期的講授過程中,學生的知識是離散的,對于這些離散的知識,設計小型的驗證性實驗,例如給定一個僅包含幾個關鍵字的小型語言,根據學習的知識,分別設計其對應的詞法分析器,使其能識別單詞;語法分析器(使用不同的方法),使其能分析句子的結構等等。
其次,在學習完成課程后,將前述的離散的驗證性實驗,進行綜合,使學生設計并實現一個小型的編譯系統。利用參考文獻4介紹的虛擬裸機,要求學生實現編譯技術從詞法分析到目標代碼生成的全部過程。
再次,就是要求學生根據自己的理解,重新設計實現他們在學習過程中使用的教輔軟件,通過這部分的練習,更加加深對原理的理解。
這三方面的實驗深度不同,對學生也有不同要求。對于優創班,三部分實驗都是必需的,每部分都要求寫出設計文檔和實驗報告,作為最終成績評定的重要依據。對于其他的學生,第一、二部分必做,而第三部分選做。通過這種方式形成了一個編譯原理實踐的完整體系。
3結論
通過在教學過程中從內容精選、授課方式改革、實驗環節設計等方面的改革,“編譯原理”課程的教學效果有了很大的改善,而且培養的學生的動手能力和能動性。在培養學生專業素質方面積累了經驗。
參考文獻
[1] 劉磊,郭德貴. “編譯原理”課程建設研究[J]. 計算機教育,2006,(6):8-10.
[2] 張立彪,劉磊. 基于建構主義教學觀的編譯原理教學改革探索[J]. 古林大學學報(信息科學版),2005,23(8):90-94.
[3] 高晗. 案例教學在“編譯原理”課程中的嘗試[J]. 天津城市建設學院學報,2005,11(3):228-230.
[4] 溫敬和. “編譯原理”課程教學研究與教材編寫[J]. 計算機教育,2006,(5):77-79.