摘要:編譯原理包含著計算機學科的一些基本知識和典型技術與方法,是計算機科學與技術專業(yè)本科教育中的重要技術基礎課程,通過知識的講授、基本方法和技術的介紹,探討典型的問題求解思想方法,使學生掌握“編譯原理”中的基本概念、基本理論、基本方法,在系統(tǒng)級上再認識程序和算法,提升計算機問題求解的水平,增強系統(tǒng)能力,提高計算機學科的基本素質,體驗實現(xiàn)自動計算的樂趣,促進創(chuàng)新能力的培養(yǎng)。
關鍵詞:編譯原理;教學定位;能力培養(yǎng);素質提高
中圖分類號:G64文獻標識碼:A
文章編號:1672-5913(2007)01-0028-03
編譯原理包含著計算機學科的一些基本知識和典型技術與方法,在計算機科學與技術專業(yè)本科教育中占有重要地位。直到1990年,我國只有100來所學校設有計算機專業(yè)(2005年已達771所),那個時期,在人們心目中,該課程一直是核心專業(yè)課,后來隨著計算機學科的發(fā)展,它逐漸變成技術基礎課,目前在絕大多數(shù)計算機科學與技術專業(yè)中開設。北京工業(yè)大學為本科生開設的“編譯原理”是北京市精品課程,在有限的學時內(nèi),面向應用型計算機專業(yè)人才的培養(yǎng),根據(jù)課程容量和學生特點,選擇適當?shù)闹R為載體,不僅介紹典型問題求解方法和技術,更注重計算學科問題求解基本思想、方法的探討,通過研究型教學,培養(yǎng)學生的計算機問題求解能力和創(chuàng)新能力。總體上,希望學生掌握“編譯原理”中的基本概念、基本理論、基本方法,在系統(tǒng)級上再認識程序和算法,提升計算機問題求解的水平,增強系統(tǒng)能力,提高計算機學科的基本素質,體驗實現(xiàn)自動計算的樂趣。下面根據(jù)筆者在不同學校里講授此課程的經(jīng)驗,并結合近些年的一些相關探索,討論有關的問題。
1 課程指導思想
課程設置的基本指導思想非常重要,它決定著課程的基本教學定位,從而決定著總體教學計劃所規(guī)定的人才培養(yǎng)目標的落實。在確定時,既要考慮到人才培養(yǎng)的全局,又要考慮學科和課程內(nèi)容的基本特點,通過對這些特點的體現(xiàn),來支撐教學目標的實現(xiàn)。
計算學科問題求解的基本思路是“問題、形式化描述、計算機化”,以抽象、理論、設計為其學科形態(tài)。編譯原理涉及的是一個適當抽象層面上的數(shù)據(jù)變換,既有明確的、便于抽象的問題,又有較成熟的理論,而且在限定規(guī)模下又容易實現(xiàn)(設計),所以編譯原理是計算機專業(yè)本科生的重要專業(yè)技術基礎課程,涉及學科的三個形態(tài)。除知識外,含有基本問題求解的典型技術和方法。Alfred V.Aho在《編譯原理》的開篇曾寫道“編寫編譯器的原理和技術具有十分普遍的意義,以至于在每個計算機科學家的研究生涯中,本書中的原理和技術都會反復用到”。課程屬于教學計劃中四大系列之軟件技術系列,繼程序設計、數(shù)據(jù)結構與算法等課程后,從系統(tǒng)級引導學生再認識程序、算法,同時促進學生系統(tǒng)能力的培養(yǎng)。
2 強調能力培養(yǎng)
根據(jù)課程設置的基本指導思想,本課程強調以知識為載體,向學生傳授典型問題求解的思想和方法,培養(yǎng)其能力,提高其素質。
* 掌握程序變換基本概念、問題描述和處理方法
這些方法主要有:自頂向下、自底向上、逐步求精、遞歸求解,目標驅動,問題分析、問題的抽象與形式化描述,算法設計與實現(xiàn),系統(tǒng)構建、模塊化等方法。這些都是本學科最經(jīng)典、最常用的問題求解與系統(tǒng)設計方法。
* 修養(yǎng)“問題、形式化描述、計算機化”
這一典型的問題求解過程,推進從“實例計算”到“類計算”和“模型計算”的跨越。
計算機學科發(fā)展到今天,已經(jīng)從單一的具體問題求解發(fā)展到對一類問題的求解,也就是尋求一類問題的系統(tǒng)求解。完成單一的具體問題求解的計算稱為“實例計算”;完成一類問題系統(tǒng)求解的計算稱為“類計算”。當然,在“類計算”中,一大部分高層次的計算是“模型計算”。這是區(qū)分于其他專業(yè)學生的重要方面之一。學生的培養(yǎng),通常都是從“實例計算”開始,逐漸推進到“類計算”,實現(xiàn)學生“計算”理念的跨越。
* 增強理論結合實際能力,獲得更多“頂峰體驗”
“編譯原理”是理論和實踐結合最好的計算機課程之一,不僅含有恰當?shù)睦碚撝R,而且直接涉及到這些理論的實踐,讓學生親歷理論結合實踐的樂趣,使優(yōu)秀的學生獲得更多的“頂峰體驗”,培養(yǎng)他們理論結合實際的能力。
* 從宏觀到微觀、從微觀到宏觀,培養(yǎng)系統(tǒng)能力
引導學生能夠站在系統(tǒng)的全局去看問題、分析問題和解決問題,并實現(xiàn)系統(tǒng)優(yōu)化。經(jīng)驗表明,這種能力是非常重要的,也是比較難培養(yǎng)的。所以在本科教學計劃中,程序設計與算法系列之后安排軟件技術系列課程,實現(xiàn)學生的系統(tǒng)認知、分析、設計和應用能力的培養(yǎng),并使學生進一步在系統(tǒng)級別上認識程序和算法。編譯原理就是其中一門課程。編譯系統(tǒng)雖然是一個具有相當規(guī)模和相當復雜度的系統(tǒng)(含總體結構),但對問題本身分析和處理的分解非常清楚,使得其規(guī)模和復雜度可控,宜于讓學生掌握,可以通過教師的引導,來鍛煉學生理解、設計能力,來達到學生系統(tǒng)能力強化培養(yǎng)的目的。
* 開展研究型教學,培養(yǎng)學生的創(chuàng)新能力
開展研究型教學,挖掘知識背后的內(nèi)容,通過講授思想、方法,模擬大師們的創(chuàng)新思維,培養(yǎng)學生的創(chuàng)新意識和創(chuàng)新能力。
3 教學基本要求
編譯原理的基本內(nèi)容是比較成熟的,其理論性強,同時還可以設計出適當?shù)膶嵺`活動與之配合,既有基本的問題求解,又是一個具有相當規(guī)模的系統(tǒng),加上它描述的形式化,又有利于強化學生“計算機問題求解”的基本能力培養(yǎng)。雖然形式化給學生學習帶來了一定的理解困難,但是只要克服了這一困難,學生才能取得更具意義的進步。因此,要求學生掌握基本的理論和分析方法,并學習如何實現(xiàn)這些理論和方法,在實踐過程中進一步理解這些理論和分析方法。充分體現(xiàn)本學科理工結合、理論與實踐緊密結合的特點。
經(jīng)過本課程的教學,使學生掌握一些基本概念、基本理論和基本方法。特別是通過教師的講授,使學生能夠對這些基本概念和理論有更深入的理解,有能力將它們應用到一些問題的求解中。要注意對其中一些基本方法的核心思想的分析,使學生能夠掌握其關鍵。
* 基本知識
理論部分包括:教學目的、基本術語、系統(tǒng)結構;正則語言、上下文無關語言、二義性、派生樹;詞法描述模型及分析實現(xiàn); LL分析、遞歸下降分析、算符優(yōu)先分析、LR分析;語法制導翻譯、屬性文法、翻譯模式、中間代碼生成;符號表、靜態(tài)存儲分配、動態(tài)存儲分配;基本優(yōu)化方法。刪除狀態(tài)矩陣法和有關理論證明,將原始的制導翻譯改為屬性翻譯,增加目標驅動,強調中間代碼生成,弱化代碼優(yōu)化和目標代碼生成。
實踐部分:在學生掌握基本原理的基礎上,在編譯程序總體結構的導引下,通過設計出詞法分析器、語法分析器,語義分析與中間代碼生成器,構建一個限定高級語言的翻譯器(能夠將賦值語句、條件語句、循環(huán)語句翻譯成中間代碼的基本翻譯系統(tǒng))。學生需完成相關算法和數(shù)據(jù)結構的設計,自行選擇語言完成實現(xiàn),最后提交規(guī)范的實驗報告,對實驗進行刻畫和分析。
* 能力培養(yǎng)
通過將教育教學研究、科學研究成果用于課程教學,通過研究型教學,強調能力培養(yǎng)。從提出問題,到求解思路分析,再到用符號表示問題及其求解算法,進一步培養(yǎng)學生抽象表示問題的能力和對“一類”問題進行求解的意識和能力;從系統(tǒng)的角度向學生展示編譯系統(tǒng),同時考慮各子系統(tǒng)的實現(xiàn)與聯(lián)系,通過不同級別的抽象和問題的分治,培養(yǎng)學生的系統(tǒng)意識和能力。
4 努力體現(xiàn)先進教育理念
開展研究型教學,通過知識的講授介紹基本方法,培養(yǎng)學生的學科能力,課堂努力再現(xiàn)大師們的問題求解思考過程,引導學生思考,體驗思考和求解問題的樂趣。培養(yǎng)學生的學科能力、創(chuàng)新能力;從具體問題求解到系統(tǒng)構建,向學生傳授基本學科方法,培養(yǎng)其系統(tǒng)能力;配合對實踐循序漸進的引導,提高學生的學習興趣,進一步提高學習效果;提出深層問題、擴展問題,列舉輔助材料,鼓勵和引導學生開闊視野,主動探索,培養(yǎng)其學習興趣、創(chuàng)新意識和創(chuàng)新能力。發(fā)揮對計算機技術優(yōu)勢,利用多媒體技術,制作與教材配套課件,通過抽象內(nèi)容的可視化,展現(xiàn)內(nèi)部處理過程。如,在關鍵處以字符為單位進行動作切換,以重現(xiàn)算法過程。多媒體配合板書,增加課程信息量,提升教學效果。同時發(fā)揮網(wǎng)絡優(yōu)勢,通過網(wǎng)站和學院開通網(wǎng)絡教學Digiclass,多途徑開展教學。
5 搞好示范
大力推進課程教學改革,努力探索課程內(nèi)容和教學方法的改進。通過實驗班教學,探索在教學內(nèi)容和方法上的改革,使實驗班及其教學能夠對普通班的教學有一個示范、帶頭作用。
針對學生的不同情況,因材施教。對實驗班同學來說,他們的接受能力要強一些,雖然執(zhí)行的是相同的教學大綱,但是,教師根據(jù)他們的實際情況,補充了一些內(nèi)容,對有些內(nèi)容有更高的要求。例如,鼓勵他們在課外更好地閱讀參考書,教師加強對他們的輔導。03級實驗班的同學就有不少人仔細閱讀著名計算機科學家和教育家Alfred V.Aho所著的《編譯器:原理、技術與工具》,并可以隨時找課程組的任何教師討論有關問題。再例如,給實驗班講編譯自動生成技術,介紹有關軟件工具,鼓勵他們在實踐中擴展編譯系統(tǒng)的功能。對于普通班同學,則注意適時地加強習題的講解以及上機輔導,使他們更好地理解課程的基本內(nèi)容,同時也鼓勵他們中的優(yōu)秀學生向實驗班看齊,提高對自己的要求。
6 課程特色
經(jīng)過多年的建設和調整,本課程形成了如下特色。
1) 傳授基本方法,培養(yǎng)學科能力
以知識為載體,傳授自頂向下、自底向上、逐步求精、遞歸求解,目標驅動,問題分析、問題的抽象與形式化描述,算法設計與實現(xiàn),系統(tǒng)構建、模塊化等方法,培養(yǎng)基本學科能力。
2) 挖掘來源,培養(yǎng)創(chuàng)新能力
挖掘知識背后的豐富內(nèi)容,通過向學生描述問題的求解思路,讓學生體驗大師們的思維,減少學生的死記硬背,培養(yǎng)學生的思維能力和創(chuàng)新能力。例如,從 LR分析法的思想根源,剖析LR分析法的精髓。
3) 重視系統(tǒng)觀念,培養(yǎng)系統(tǒng)能力
系統(tǒng)能力是應用型計算機人才之長,通過不同級別上的抽象和虛擬系統(tǒng)的建立,用一個適當規(guī)模和復雜度的系統(tǒng)的設計與實現(xiàn)貫穿整個課程,將學生的視角從“程序級”提高到系統(tǒng)級。
4) 注重實驗,培養(yǎng)實踐能力
實現(xiàn)生成一個“小語言”中間代碼的編譯器,在總體結構指導下,通過其分解為“詞法分析器設計與實現(xiàn)”、“語法分析器設計與實現(xiàn)”、“語義分析與中間代碼器設計與實現(xiàn)”,引導學生在有限學時內(nèi)完成實驗,促進對基本原理的理解和實踐能力的培養(yǎng)。
參考文獻:
[1] Alfred Aho,Ravi Sethi,Jeffrey D. Ullman. 編譯原理[M].李建中,姜守旭譯.北京:機械工業(yè)出版社,2003.
[2] 蔣宗禮,趙一夫. 談高水平計算機人才的培養(yǎng)[J]. 中國大學教學,2005,(9):24-27.
[3] 中國計算機科學與技術學科教程2002研究組. 中國計算機科學與技術學科教程2002[M]. 北京:清華大學出版社,2002.
[4]蔣宗禮. 論“編譯”的性質及其知識載體屬性的開發(fā)利用[J]. 計算機教育(增刊),2004:53-56.
[5] 蔣宗禮. 試論計算學科抽象第一的基本教育原理[J].計算機教育,2004,(11):54-58.
投稿日期:2006-10-10
作者簡介:蔣宗禮(1956年10月),男(漢族),河南,教授,研究方向:網(wǎng)絡計算,操作系統(tǒng),計算機專業(yè)教育。