亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        “編譯原理”課程教學(xué)研究和教材編寫

        2006-05-23 08:07:42溫敬和
        計算機教育 2006年5期
        關(guān)鍵詞:編譯原理詞法分析法

        溫敬和

        由于教育的需求和市場經(jīng)濟的作用,目前教材出版業(yè)相當(dāng)活躍,新書層出不窮,令人目不暇接。作為一個使用教材進行教學(xué)的教師,最關(guān)心的是教材質(zhì)量,選擇合適的教材是進行教學(xué)的第一步。教材與專著不同,教材是教師教學(xué)的工具,教材的主要讀者是學(xué)生。在書寫教材的過程中,對學(xué)科的知識體系要進行合理的刪選,使它適合于教學(xué)和知識的傳授。由于本人長期從事“編譯原理”課程教學(xué),所以對于該課程的教材特別關(guān)注,想就“編譯原理”課程的教學(xué)和教材編寫,發(fā)表一些本人的看法,供同行參考。

        教材現(xiàn)狀和問題

        我上大學(xué)時,“編譯原理”課程用的是由陳火旺、錢家驊、孫永強三位老師合寫的“編譯原理”一書,這本書可稱之為編譯原理教材的經(jīng)典。該書系統(tǒng)地介紹了編譯基本理論和方法,內(nèi)容充實,覆蓋面廣。既注重了最經(jīng)典、最廣泛的基本編譯技術(shù),又力求反映20世紀(jì)70年代以來一些最重要的新成果。至今,該書仍是我進行教育和科研的主要參考書之一。我記得當(dāng)時上課的王家啟老師(上海計算技術(shù)研究所)給當(dāng)學(xué)生的我們出了一個上機題目:輸入一個正規(guī)式,輸出該正規(guī)式對應(yīng)的確定有限自動機,當(dāng)然該題是書中習(xí)題之一。在解題過程中,我曾經(jīng)有過這樣的想法,是否可以用LR分析法來解決這個問題。正是由于這個20年前的想法,加上自己不斷的努力,在對編譯理論理解和實踐不斷加深的同時,于2001年提出了一個新的自動構(gòu)造詞法分析器的方法,論文發(fā)表于《計算機工程》雜志2001年第7期。

        在隨后的“編譯原理”課程的教學(xué)中,本人也不斷發(fā)現(xiàn)好書或書中寫得比較好的段落。例如由高仲儀、蔣立源二位老師合寫的《編譯技術(shù)》一書。在該書中,通過一個“大象吃花生”的英文句子的語法分析,引入上下無關(guān)文法的基本概念和定義,這樣的書寫使人特別容易理解。又如由何炎祥老師主編的《編譯原理》一書。在該書中有關(guān)LR分析法基本原理的描述寫得相當(dāng)好,他將活前綴在LR分析法中的作用寫得清清楚楚。另外,盡管有些書不是介紹編譯技術(shù)的,但是這些書對于“編譯原理”課程的教學(xué)也是相當(dāng)有益。例如由蔣國南老師翻譯的《PASCAL程序設(shè)計》一書,書中二個程序例給了我特別深刻的印象。一個是去除源程序注釋的程序例,而另一個是使用自動機的程序例。在以往的《編譯原理》教科書中,只介紹如何構(gòu)造自動機,基本上不介紹使用自動機的控制程序。其結(jié)果是:學(xué)生只知道自動機的構(gòu)造方法,但不知道自動機如何使用。同樣,在以往的詞法分析教學(xué)中,只注重掃描器(單詞識別程序)的教學(xué),手工構(gòu)造有狀態(tài)轉(zhuǎn)換圖,自動構(gòu)造有DFA;而對于詞法分析的輸入和預(yù)處理,最多一筆帶過。實際上,輸入和預(yù)處理程序是編譯程序和用戶程序的接口。編譯程序首先是從文件讀入源程序,經(jīng)預(yù)處理后,才由掃描器進行單詞識別。適當(dāng)加強這部分內(nèi)容的教學(xué),有助于學(xué)生對編譯程序前端的理解。

        當(dāng)然,由國內(nèi)出版社出版的書也有不盡人意的地方。例如現(xiàn)在寫書都要求有創(chuàng)新或標(biāo)異。明明沒有創(chuàng)新或標(biāo)異,為了達到該指標(biāo),將一些與“編譯原理”課程無關(guān)或關(guān)系不大的內(nèi)容寫入書內(nèi),這些內(nèi)容根本不會用于教學(xué),比較典型的是“并行編譯”這部分教材內(nèi)容。個別作者將國外教材刪去某些章節(jié),加上習(xí)題和習(xí)題解答后,就作為一本教材交付某出版社出版。正因為本人曾買到過這種類型的書,從此改變了本人看到有關(guān)編譯的書就買的習(xí)慣。目前在市場上銷售的有關(guān)編譯的書,基本上都以LEX和YACC系統(tǒng)作為“編譯原理”課程實習(xí)手段。當(dāng)然LEX和YACC系統(tǒng)有多種版本,可用于不同的操作系統(tǒng)。但LEX和YACC系統(tǒng)畢竟是外國人編制的,是否適合于國內(nèi)教學(xué)仍是個問號。由于本人與他校教師基本無教學(xué)交流,也不清楚實際使用效果如何,有關(guān)編譯的書大都由多人合寫,寫編譯理論部分的作者和寫實驗部分的作者往往不是同一人。從書的整體來看,有明顯的脫節(jié)現(xiàn)象。LEX系統(tǒng)實際是一個狀態(tài)轉(zhuǎn)換矩陣產(chǎn)生器,而YACC系統(tǒng)實際上是一個LALR(1)分析表產(chǎn)生器。我想,LEX和YACC系統(tǒng)并沒有復(fù)雜到常人不可實現(xiàn)的程度,為什么作者本人不能動手編寫一個類似系統(tǒng)用于學(xué)生實驗。

        當(dāng)然也不是說國外教材什么都好,包括國外優(yōu)秀教材在內(nèi),也有不足之處。舉一個簡單例子:計算機的內(nèi)存越來越大,由于引入控件,用戶程序越來越短,是否還有必要將“在詞法分析預(yù)處理時,通常將輸入緩沖區(qū)分成二個半?yún)^(qū)互補輪流工作”這一內(nèi)容寫入教材,我想至少要說明一下。

        提高教師自身學(xué)術(shù)水平

        “編譯原理”這門課程涉及的知識面較廣,一頭是程序設(shè)計語言,包括文件系統(tǒng);而另一頭是匯編語言或機器語言,包括計算機的系統(tǒng)結(jié)構(gòu)。編譯系統(tǒng)以形式語言和自動機為基礎(chǔ)理論,構(gòu)造算法復(fù)雜,系統(tǒng)十分龐大。所以,將“程序設(shè)計語言”、“數(shù)據(jù)結(jié)構(gòu)”、“離散數(shù)學(xué)”和“匯編語言”等課程作為“編譯原理”課程的前驅(qū)課程已成為共識。作為一個“編譯原理”課程授課教師,除“編譯原理”課程本身外,還要全面掌握上述這些課程的知識。尤其是對于“程序設(shè)計語言”和“匯編語言”這兩門課程,要有一定的教學(xué)經(jīng)歷,這樣才能把握好“編譯原理”這門課程的教學(xué)。

        現(xiàn)在有越來越多的教師加入了寫書行列,著書立說已不是少數(shù)人的專利。但是,如何寫書,如何寫好書,這是每個作者必須面對的問題。尤其是作為一本教材的作者,必須具有一定的學(xué)術(shù)水平。在自己所涉及的學(xué)科領(lǐng)域中要花大功夫,要有自己的見解,要有自己的論文。在一定知識積累的基礎(chǔ)上,才能編寫好教材。

        以科研為基礎(chǔ)

        “編譯原理”課程是一門實踐性很強的課程。盡管這門學(xué)科比較成熟,但仍然存在許多課題,有待我們?nèi)ヌ剿?。比較典型的問題就是上面提及的LEX和YACC類似系統(tǒng)的實現(xiàn)。

        本人先后實現(xiàn)了LL(1)分析表自動產(chǎn)生器、LR(0)分析表自動產(chǎn)生器和SLR(1)分析表自動產(chǎn)生器,相當(dāng)于實現(xiàn)了YACC類似系統(tǒng)。由于有這樣的編程經(jīng)歷,使得我在上語法分析課時,有一種如魚得水的感覺。

        作者曾試圖實現(xiàn)LEX系統(tǒng),但未獲成功。正規(guī)式相當(dāng)于算術(shù)表達式,作者從LR分析法的教學(xué)中得到啟示,將LR分析法應(yīng)用于詞法分析器的自動構(gòu)造,成功地實現(xiàn)了詞法分析器的自動產(chǎn)生器,所生成的詞法分析器是使用LR分析表來工作的。為了區(qū)別LEX系統(tǒng),該系統(tǒng)簡稱為LR_LEX系統(tǒng)。

        在此基礎(chǔ)上,本人進一步實現(xiàn)了匯編程序自動產(chǎn)生器,論文發(fā)表于《計算機工程》雜志2005年第12期。

        該二項新的編譯技術(shù)和方法已寫進《編譯原理實用教程》一書,該書已由清華大學(xué)出版社出版發(fā)行。

        重組教材內(nèi)容

        可能有些《編譯原理》教材作者,他寫書的目的并不是完全面向?qū)W生的,可能考慮把它作為這門學(xué)科的大全來編寫。例如由美國著名計算機科學(xué)家Alfred V.Aho、Ravi Sethit和Jeffrey D.Ullman合著的《Compilers: Principle,Techniques,and Tools》一書,該書已由李建中和姜守旭老師翻譯成中文,中文譯名為《編譯原理》。將這樣的書作為教材,本人認(rèn)為是不合適的,將它作為教師的教學(xué)參考用書,那是最好不過了。

        由于面向的學(xué)生不同,培養(yǎng)目標(biāo)不同,如何編寫合適的“編譯原理”課程教材,在很大程度上取決于作者本人所處的教學(xué)環(huán)境。但是,有一點是共通的,通過“編譯原理”課程教學(xué),使學(xué)生掌握編譯基本理論和方法,能夠建立一個較為完整的編譯系統(tǒng)模型。不能由于作者個人因素或者知識難易程度來左右教材的書寫。從國內(nèi)出版的一部分《編譯原理》課程教材和實際教學(xué)內(nèi)容安排來看,本人認(rèn)為存在如下問題:

        (1)詞法分析部分偏少;

        (2)語法分析部分過多;

        (3)語義分析部分過于簡單;

        (4)目標(biāo)代碼生成部分幾乎是空白;

        (5)講授了一些不是很有必要講授的內(nèi)容(如DFA最小化、中間代碼優(yōu)化等)。

        這是造成學(xué)生學(xué)習(xí)“編譯原理”課程感到困惑的主要原因。難怪有些教師寧可使用老教材或者國外教材,而不愿使用新教材。

        詞法分析相當(dāng)重要。正是從詞法分析開始,將學(xué)生領(lǐng)進編譯系統(tǒng)的大門。并且,作為編譯系統(tǒng)的基礎(chǔ)理論(自動機),也是在詞法分析階段講授的。在授課中,應(yīng)強調(diào)單詞二元式的作用,單詞種別用于語法分析,單詞值用于語義分析。關(guān)于“DFA最小化”這一部分教學(xué)內(nèi)容,本人認(rèn)為應(yīng)刪除,教育重點應(yīng)為:DFA的構(gòu)造和使用。理由為:編譯系統(tǒng)太復(fù)雜,首先要解決吃飯問題,然后再解決吃得好問題。

        語法分析部分的教材篇幅應(yīng)大幅減少。算符優(yōu)先分析法較簡單,宜于手工構(gòu)造,特別適合于算術(shù)表達式的語法分析,在有些程序設(shè)計語言書中,也能看到它的介紹。由于算符優(yōu)先分析法適用范圍較小,實用意義不大,在教材中完全可將其刪除。關(guān)于LR分析法,本人認(rèn)為只要介紹LR(0)和SLR(1)分析法即可。理由為:SLR(1)分析法很實用,分析表又易于構(gòu)造,它可解決大部分語言的識別問題。編譯系統(tǒng)中的事情太多,先解決主要矛盾。

        語義分析部分應(yīng)加強,這是學(xué)生理解整個編譯系統(tǒng)的關(guān)鍵,尤其要著重介紹符號表和常數(shù)表在編譯程序中的作用。有了護照,可以周游世界;有了符號表和常數(shù)表,可以在編譯系統(tǒng)中暢行無阻,符號表和常數(shù)表就是編譯系統(tǒng)的護照。在內(nèi)存分配時,符號表是變量地址分配的依據(jù)。由于符號表的引入,使得代碼生成和變量實際存放地址無關(guān);甚至可在程序運行過程中,對變量地址進行動態(tài)分配。

        在目標(biāo)代碼生成部分,可先假設(shè)一個匯編語言虛擬機模型,然后介紹從四元式到匯編語言的翻譯。應(yīng)強調(diào)的是:由于符號表和常數(shù)表的結(jié)構(gòu)不同,導(dǎo)致變量和常數(shù)尋址方式的不同。從匯編語言到機器碼的翻譯, 可將其留作課程實習(xí),詳見下一節(jié)。

        創(chuàng)建實驗環(huán)境

        向?qū)W生提供一個虛擬裸機,虛擬裸機是用高級語言來實現(xiàn)的,虛擬裸機只接受二進制形式的機器指令。提供虛擬裸機的好處在于:可將與編譯無關(guān)的一些硬件特性屏蔽掉,可根據(jù)要求來改變虛擬硬件配置。

        要求學(xué)生根據(jù)虛擬裸機的機器指令設(shè)計匯編語言,然后構(gòu)造匯編程序。用戶用匯編語言編寫程序,由匯編程序?qū)⑺g成機器指令程序,該機器指令程序可以在虛擬裸機上運行,這樣就形成了一個微型編譯系統(tǒng)。這個微型編譯系統(tǒng)包括了編譯過程的四個主要階段,它們是詞法分析、語法分析、語義分析和目標(biāo)代碼生成。在匯編程序構(gòu)造中,要求學(xué)生運用在“編譯原理”課程中所學(xué)到的理論和方法。首先根據(jù)機器指令中所含的地址數(shù)量,將機器指令劃分為0地址指令(RET)、A型1地址指令(READ)、B型1地址指令(CALL)和2地址(ADD)指令三大類。然后用上下文無關(guān)文法予以描述,并生成SLR(1)分析表。由于分析表的規(guī)模不大,可由學(xué)生手工構(gòu)造。在有條件的情況下,可向?qū)W生提供SLR(1)分析表產(chǎn)生器,用于驗證分析表的正確性。根據(jù)機器指令的二進制位特征,設(shè)計和構(gòu)造語義分析器。語義分析子程序主要是由二進制位運算構(gòu)成。當(dāng)然這個匯編程序是相當(dāng)初步的,它不允許用戶用符號名來表示變量地址或標(biāo)號。

        有關(guān)這一部分內(nèi)容,在《編譯原理實用教程》一書中有詳細介紹。

        “編譯原理”課程是計算機專業(yè)本科生必修課程。該課程對于計算機專業(yè)學(xué)生來說,是一門難度較大的專業(yè)課程,不少學(xué)生,就連上課教師也感到頭疼。由于學(xué)生對該課程意見比較大,有些學(xué)校甚至準(zhǔn)備將“編譯原理”課程從本科教學(xué)計劃中刪除。實際上,計算機專業(yè)課程大部分都比較難,如計算機操作系統(tǒng)、計算機組成原理、計算機網(wǎng)絡(luò)等。為什么學(xué)生對“編譯原理”課程教學(xué)意見特別大,可能有多種原因。計算機操作系統(tǒng)有五大管理,這些管理可以分別單獨講授,可不涉及它們之間的聯(lián)系。因為在某種狀態(tài)下,計算機確實以這種方式工作。如果要介紹操作系統(tǒng)的整體工作機制的話,我想操作系統(tǒng)要比編譯系統(tǒng)難得多。更深層次的原因還是應(yīng)從教師自身查找,只有深刻理解編譯系統(tǒng)的工作原理,包括理論和實踐兩個方面,才能為人之師。天下無難事,只怕有心人,只要我們不斷努力,我想一定能搞好“編譯原理”課程的教學(xué)。

        猜你喜歡
        編譯原理詞法分析法
        詞法 名詞、代詞和冠詞
        異步機傳統(tǒng)分析法之困難及其克服
        防爆電機(2022年4期)2022-08-17 05:59:06
        應(yīng)用于詞法分析器的算法分析優(yōu)化
        基于時間重疊分析法的同車倒卡逃費探析
        談對外漢語“詞法詞”教學(xué)
        軟件學(xué)院編譯原理實踐課程的教學(xué)探索
        計算機教育(2016年8期)2016-12-24 10:24:00
        基于MOOC的編譯原理分階段課程教學(xué)研究
        計算機教育(2016年9期)2016-12-21 00:32:22
        營造興趣啟蒙式學(xué)習(xí)氛圍的編譯原理首課設(shè)計
        計算機教育(2016年7期)2016-11-10 08:48:50
        層次分析法在SWOT分析法中的應(yīng)用
        “編譯原理”課程教學(xué)改革初探
        国产av一区二区三区在线| 少妇私密会所按摩到高潮呻吟| 末发育娇小性色xxxx| 国产av国片精品| 久久精品国产亚洲av高清热| 天躁夜夜躁狼狠躁| 国产精品中文第一字幕| 人妻一区二区三区免费看| 国产视频激情视频在线观看| 国产乱人无码伦av在线a| 国内少妇毛片视频| 亚洲aⅴ在线无码播放毛片一线天| 国产成人av综合亚洲色欲| 国模无码视频专区一区| 色婷婷亚洲十月十月色天| 日本免费大片一区二区三区| 日韩乱码人妻无码系列中文字幕| 午夜视频在线在免费| √最新版天堂资源在线| 亚洲不卡av不卡一区二区| 日本无吗一区二区视频| 日韩精品一区二区三区人妻在线| 美女网站免费观看视频| 国产真实老熟女无套内射| 国产精彩视频| 亚洲黄片av在线免费观看| 国产自拍成人免费视频| 麻豆婷婷狠狠色18禁久久| 无码人妻精品一区二区三区免费| 久久国产精品岛国搬运工| 国产丝袜一区丝袜高跟美腿| 国产狂喷水潮免费网站www| 精品国产人妻一区二区三区| 国产精品中文第一字幕| 操国产丝袜露脸在线播放| 亚洲天堂亚洲天堂亚洲色图| 亚洲成熟丰满熟妇高潮xxxxx| 精品无码人妻一区二区三区| 久久久调教亚洲| 中文字幕一区二区黄色| 日本爽快片100色毛片|