成人免费看黄网站无遮挡,caowo999,se94se欧美综合色,a级精品九九九大片免费看,欧美首页,波多野结衣一二三级,日韩亚洲欧美综合

編譯原理小論文

時(shí)間:2021-03-29 17:25:07 論文 我要投稿

編譯原理小論文

  編譯原理是計算機專(zhuān)業(yè)的一門(mén)重要專(zhuān)業(yè)課,旨在介紹編譯程序構造的一般原理和基本方法。那么編譯原理小論文要怎么寫(xiě)呢?不妨來(lái)參考一下小編帶來(lái)的編譯原理小論文樣本。希望大家喜歡哦!

編譯原理小論文

  編譯原理小論文

  摘要:本文探討了在計算機軟件技術(shù)快速發(fā)展的情況下,高校計算機類(lèi)專(zhuān)業(yè)編譯原理課程的改革問(wèn)題。提出了編譯原理課程教學(xué)模型從過(guò)程式向對象式的轉變、編譯程序的面向對象構造(包括編譯算法的描述)等問(wèn)題,以及由此帶來(lái)的教學(xué)內容的調整和課程實(shí)驗的設計問(wèn)題。

  關(guān)鍵詞:編譯程序;教學(xué)改革;對象式程序設計;Java

  1 引言

  編譯原理課程是高校計算機類(lèi)專(zhuān)業(yè)的重要基礎和骨干課程。編譯原理對計算機專(zhuān)業(yè)的學(xué)生的重要性與高等數學(xué)對理科學(xué)生的重要性幾乎可以相提并論。同時(shí),由于這門(mén)課程涉及其他多門(mén)課程的知識,使得它成為大學(xué)階段中最難學(xué)的課程之一。

  從表面上看,編譯程序是將高級語(yǔ)言源程序翻譯成低級語(yǔ)言程序,但編譯程序構造的基本原理和技術(shù)也廣泛應用于一般軟件的設計和實(shí)現,其中的設計思想、算法、思維方式和技術(shù)都可能會(huì )對學(xué)生今后的職業(yè)發(fā)展產(chǎn)生比較大的影響。

  當今,程序設計已經(jīng)基本上從傳統的過(guò)程式轉向對象式,并且正在從對象式轉向組件型。這其實(shí)是程序設計范型的變遷,是在計算機技術(shù)背景下認識世界的觀(guān)點(diǎn)的變化:過(guò)程式將完成事務(wù)看成是一系列的步驟,而對象式卻將世界看成是由一系列對象組成的,這些對象之間交互合作完成特定的事務(wù)。從過(guò)程式到對象式,有著(zhù)質(zhì)的變化,而非一般的修改和完善,由此帶來(lái)了語(yǔ)言(算法描述工具)的變化。編程語(yǔ)言影響思維,面向對象的思維方法又促進(jìn)了編程語(yǔ)言的發(fā)展。

  目前,程序設計的一些后繼課程,如數據結構等都進(jìn)行了同步跟進(jìn),出現了諸如用C++或Java描述的數據結構教材。但編譯原理課程卻沒(méi)有及時(shí)跟進(jìn),上述改變基本上沒(méi)有反映到編譯原理課程中。這門(mén)課程近20年來(lái)基本上沒(méi)有大的變化,教學(xué)內容仍然是基于過(guò)程式語(yǔ)言展開(kāi)的,編譯算法和模型描述是用PASCAL語(yǔ)言或者C語(yǔ)言。雖然個(gè)別教材加入了少量關(guān)于對象式語(yǔ)言編譯技術(shù)的內容,那也是稍加點(diǎn)綴而已,作用不大。這就造成了一種奇怪的現象:對象式語(yǔ)言已經(jīng)成了高校計算機教學(xué)的主流語(yǔ)言,社會(huì )上大量使用的也是對象式語(yǔ)言,而我們的編譯原理教學(xué)仍然沿襲舊的一套。這種“狀態(tài)”嚴重地脫離了計算機技術(shù)的發(fā)展和社會(huì )的實(shí)際需要,因此需要進(jìn)行“調態(tài)”,其根本做法是“轉型”,即將本課程的討論對象從過(guò)程式語(yǔ)言轉到對象式語(yǔ)言。

  國外近年關(guān)于編譯原理方面的新教材已經(jīng)有了重要改變,不再連篇累牘地討論那些已經(jīng)過(guò)時(shí)的內容,增加了許多新的內容。其中一個(gè)重大改變是出現了用對象式語(yǔ)言描述編譯算法和教學(xué)模型的編譯原理教材,如:用Java語(yǔ)言描述的編譯原理教材,且其教學(xué)模型為MiniJava。

  這種改變也涉及到課程上機實(shí)踐。眾所周知,編譯原理課程的學(xué)術(shù)性和實(shí)踐性都很強:學(xué)術(shù)性是這門(mén)課程的`生命所在,實(shí)踐性是這門(mén)課程的活力所在。因而本課程的上機實(shí)踐也要作同步調整。

  2 課程內容圍繞對象式語(yǔ)言展開(kāi)

  研究程序設計語(yǔ)言的語(yǔ)法描述需要有文法理論的支持,老教材中文法、詞法分析和語(yǔ)法分析部分內容基本上不需要作什么變動(dòng)。詞法分析主要依賴(lài)有窮狀態(tài)自動(dòng)機理論,語(yǔ)法分析主要講述LL方法和LR方法,其他方法略做介紹即可,無(wú)需展開(kāi)討論。LL方法和LR方法含蓋了許多分析技術(shù),理論性和應用性都很強,完全可以代表主流技術(shù)。

  重要的就是研究對象和教學(xué)模型的改變。首先,研究對象將從過(guò)程式程序設計語(yǔ)言轉到對象式程序設計語(yǔ)言(當然還可以兼顧過(guò)程式),例如Java、C++等,圍繞實(shí)現這類(lèi)語(yǔ)言的編譯實(shí)現技術(shù)展開(kāi)討論。對象式程序設計語(yǔ)言的要素是封裝、繼承、多態(tài)性,在編譯實(shí)現時(shí)都必須仔細考慮。其次,涉及到對象式程序設計語(yǔ)言編譯程序教學(xué)的模型選擇問(wèn)題。目前傳統的教材選擇的教學(xué)模型有PL/0、Tini C等。實(shí)踐證明,圍繞某個(gè)模型展開(kāi)編譯設計技術(shù)的討論,效果是比較好的。課程研究對象和教學(xué)模型的改變涉及到調整的章節主要有語(yǔ)法分析、語(yǔ)義分析、代碼生成、符號表管理、存貯分配等方面。

  一旦我們討論的模型發(fā)生變化,這些章節的內容就要作很大調整。如對象式語(yǔ)言的作用域規則、語(yǔ)言動(dòng)態(tài)特性、模塊化封裝(類(lèi))、類(lèi)的繼承、多態(tài)性的實(shí)現等,都需要具體的技術(shù)來(lái)實(shí)現,這些都要反映在教材和教學(xué)中。

  就課程中關(guān)于代碼生成內容來(lái)看,目前Java編譯程序生成Java虛擬機(JVM)代碼,C#生成MSIL虛擬機代碼。這兩個(gè)虛擬機作為教學(xué)模型來(lái)說(shuō)可能比較復雜了一些,在教學(xué)中可以選定一個(gè)簡(jiǎn)單的子集;或者在PL/0虛擬機上適當增加一些指令代碼,以便于代碼生成、存貯分配等部分的講解。

  實(shí)踐證明,作為教學(xué)模型,在教材上提供一個(gè)小型語(yǔ)言的編譯程序供學(xué)生分析和研究,非常有利于加深對基本原理的理解和掌握。這個(gè)小型編譯程序可以比較小但應該能夠說(shuō)明一些基本問(wèn)題,例如傳統的編譯原理課程中選擇PL/0編譯程序作為教學(xué)模型,就收到了比較好的教學(xué)效果。在對象式程序設計語(yǔ)言編譯原理課程中選擇Object—pl/0或者M(jìn)iniJava作為教學(xué)模型是比較恰當的。前者是在傳統的PL/0語(yǔ)言上增加類(lèi),補充封裝、繼承、多態(tài)性之語(yǔ)言成分得到的;后者是對Java語(yǔ)言進(jìn)行適當簡(jiǎn)化得到的,其主要語(yǔ)法描述 。

  編譯原理課程可以圍繞此模型展開(kāi)討論。國外已經(jīng)有這類(lèi)教材出現,并且不少大學(xué)已經(jīng)開(kāi)始使用。

  3 用對象式語(yǔ)言描述編譯算法和教學(xué)模型

  本課程中各類(lèi)編譯算法都應該伴隨著(zhù)教學(xué)模型的變化,改用對象式語(yǔ)言來(lái)描述,如用Java語(yǔ)言描述或者用C++語(yǔ)言描述。其中一個(gè)重大的變化是教學(xué)模型如MiniJava或Object—pl/0要用對象式語(yǔ)言實(shí)現,也就是提出了教學(xué)模型的面向對象構造問(wèn)題,這就比較好地將討論對象和描述討論對象的語(yǔ)言統一起來(lái)了。國外有的教材就選擇了用Java描述MiniJava編譯程序。

  編譯程序是一個(gè)重要的中大型軟件,傳統的編譯程序大都是用PASCAL、C等語(yǔ)言描述的(參見(jiàn)圖2)。像編譯程序這樣的中大型程序如何用類(lèi)這個(gè)工具來(lái)進(jìn)行分解,其實(shí)是對學(xué)生的對象式程序設計能力的一個(gè)重要檢驗。學(xué)習用對象式語(yǔ)言來(lái)描述編譯程序,學(xué)生可能會(huì )受到一次嚴格的對象式語(yǔ)言程序設計訓練,編譯程序如何用類(lèi)這個(gè)工具進(jìn)行分解,這些類(lèi)(對象)如何合作完成編譯任務(wù),都需要較好的對象式程序設計基礎。圖3是一個(gè)程序設計語(yǔ)言文法的面向對象表示。

  傳統的編譯程序構造主要存在如下一些問(wèn)題:

 。1)傳統編譯程序試圖通過(guò)將編譯程序根據功能模塊分解,而使整個(gè)編譯程序的復雜性降低。這種方法雖然在一定程度上簡(jiǎn)化了編譯過(guò)程。但為了處理大型、復雜且多變的編譯程序,僅僅將它按照功能分解成詞法分析、語(yǔ)法分析、語(yǔ)義處理和代碼生成幾個(gè)階段是遠遠不夠的。

 。2)傳統的編譯程序構造中,編譯的每個(gè)階段依然是大型、復雜的,且每個(gè)階段內部依然存在復雜的聯(lián)系,這對編譯程序的可維護性沒(méi)有實(shí)際上的改變,反而造成維護困難。

 。3)雖然傳統的編譯程序構造有著(zhù)豐富的理論基礎,也有一些工具諸如Lex、Yacc等,但對一個(gè)具體的編譯程序的構造仍然要從最基本的描述開(kāi)始。傳統的編譯程序構造的功能分解方法缺乏支持復用的良好機制。

  總之,過(guò)程式程序設計范式存在的問(wèn)題在編譯程序設計中廣泛存在。而用對象式程序設計語(yǔ)言來(lái)描述編譯程序,則對象式程序設計范式帶來(lái)的好處基本上都能夠得到。具體主要表現在:

 。1)編譯程序效率高。由于面向對象的編譯程序構造采用的是語(yǔ)法樹(shù)構造法,可以得到上下文相關(guān)信息,并根據上下文進(jìn)行語(yǔ)法樹(shù)的優(yōu)化,所以生成的代碼效率高。

 。2)復用方便。由于語(yǔ)法類(lèi)和具體的語(yǔ)法結構一一對應,所以在復用語(yǔ)法結構時(shí),可以直接得到能被復用的語(yǔ)法類(lèi),不需要經(jīng)過(guò)查找過(guò)程。

 。3)修改方便。由于面向對象方法中的封裝和多態(tài)等技術(shù)的實(shí)現,語(yǔ)義處理方法中所用到的數據都是局部數據,因此要做語(yǔ)義修改時(shí),只要繼承相應的語(yǔ)法類(lèi),并且重載相應的語(yǔ)義處理方法即可,需修改的內容較之傳統方法要少。

 。4)有利于構造編譯程序類(lèi)庫,使得編譯程序的構造能夠大量復用已有的類(lèi),這是更高層次上的復用。

  4 課程實(shí)驗的設計

  計算機學(xué)科是一門(mén)技術(shù)學(xué)科,它雖然有一定的科學(xué)的成分,但工程技術(shù)的成分更多一些,因此需要加強動(dòng)手能力的培養。編譯原理課程除了注重它的原理性,還必須注重其實(shí)踐性。學(xué)習這門(mén)課程時(shí),學(xué)生對編譯的理解往往只停留在書(shū)本的概念上,而不知道怎樣把編譯理論應用到實(shí)際的編譯程序設計的實(shí)踐中。另外,有些學(xué)校只將教學(xué)內容鎖定在文法、詞法分析(有窮狀態(tài)自動(dòng)機)、語(yǔ)法分析(LL、LR文法)上,以應付學(xué)生考研的需要。這些做法使得學(xué)生很難掌握這門(mén)課程的精髓。

  編譯系統可能是所有軟件系統中最復雜的系統之一,通過(guò)本課程實(shí)踐環(huán)節的教學(xué),還可以幫助學(xué)生掌握一些大、中型軟件設計的技術(shù)和技巧,提高學(xué)生面向對象軟件開(kāi)發(fā)的綜合能力。

  傳統的編譯原理課程往往要求學(xué)生自己實(shí)現一個(gè)詞法分析程序;實(shí)現一個(gè)基于遞歸子程序遞歸下降分析程序或基于預測分析表的語(yǔ)法分析程序;為某虛擬機(例如PL/0虛擬機)生成代碼;對教學(xué)模型(例如PL/0)進(jìn)行擴充,寫(xiě)出完整的編譯程序等。且在此過(guò)程中學(xué)生可以借助詞法分析自動(dòng)生成程序Lex和語(yǔ)法分析自動(dòng)生成程序Yacc進(jìn)行有關(guān)實(shí)驗。我們要求學(xué)生通過(guò)對教學(xué)模型的分析,能夠在機器上動(dòng)手實(shí)現一個(gè)小的編譯系統,以加深對編譯整個(gè)過(guò)程的一致性、連貫性、整體性的理解。

  一旦我們的討論對象改變?yōu)閷ο笫秸Z(yǔ)言,則其編譯程序語(yǔ)法和詞法分析的自動(dòng)生成不能再采用Lex、Yacc這類(lèi)工具了,需要改用JavaCC(Java Compiler Compiler)或SableCC等,它們都能生成Java語(yǔ)言代碼;或者使用Jikespg(Jikes paser gernerator),它生成C++代碼。

  我們初步制定了本課程的實(shí)踐環(huán)節,它主要分四個(gè)層次:

 。1)借助JavaCC或SableCC等工具讓學(xué)生自動(dòng)生成小語(yǔ)言的詞法分析和語(yǔ)法分析程序。這個(gè)實(shí)驗的目的是教會(huì )學(xué)生關(guān)于詞法分析和語(yǔ)法分析的自動(dòng)生成,同時(shí)弄清這些工具生成出來(lái)的代碼的程序結構,特別是面向對象的類(lèi)結構。

 。2)為上面生成的語(yǔ)法樹(shù)添加語(yǔ)義動(dòng)作,完成生成代碼的工作。這個(gè)實(shí)驗的目的是讓學(xué)生理解如何在抽象語(yǔ)法樹(shù)上添加語(yǔ)義動(dòng)作,理解為虛擬機生成代碼的知識。

 。3)擴展教學(xué)模型,如MiniJava,為其增加一些語(yǔ)言成分,如有關(guān)語(yǔ)句等,然后為其構造完整的編譯程序。這一實(shí)驗讓學(xué)生把握編譯的總體,弄清各部分之間的關(guān)系。

 。4)逐步構造面向對象的編譯程序類(lèi)庫,使得“編寫(xiě)”編譯程序逐步走向“組裝”編譯程序。

  5 結束語(yǔ)

  對計算機人才的層次結構、知識、能力與素質(zhì)等方面的要求在很大程度上取決于計算機市場(chǎng)。我們需要與時(shí)俱進(jìn),適時(shí)考慮相應教學(xué)體系和內容的改變。依賴(lài)過(guò)程范性的編譯原理課程勢必要被依賴(lài)對象范性的編譯原理課程所取代,這是軟件技術(shù)發(fā)展和社會(huì )實(shí)際應用的需要。但建立本課程新的課程信念、課程價(jià)值、課程技術(shù)等尚需時(shí)日,需要不斷探索和創(chuàng )新。

  編譯原理課程的改革不僅需要教師付出大量辛勤勞動(dòng),及時(shí)跟進(jìn)技術(shù)的發(fā)展,還需要好的教材、好的課程實(shí)驗設計!秾ο笫匠绦蛟O計語(yǔ)言編譯原理》便是我們按照上述思路來(lái)編寫(xiě)的教材。

  參考文獻

  [1] 中國計算機本科專(zhuān)業(yè)發(fā)展戰略研究報告[J]。中國大學(xué)教學(xué),2005,5:7—10。

  [2]Andrew W。Apple,F代編譯器的Java實(shí)現[M]。北京:電子工業(yè)出版社,2004。

  [3]Dick Grune etc。Modern Compiler Design[M]。JOHN WILEY&SONS,LTD,2002。

  [4] 胡學(xué)聯(lián)。開(kāi)設軟件新技術(shù)課程的實(shí)踐探索[J]。黃河科技大學(xué)學(xué)報,2004 ,2。

  [5] 胡學(xué)聯(lián)等。對象式程序設計語(yǔ)言編譯原理[M]。

【編譯原理小論文】相關(guān)文章:

【熱門(mén)】科學(xué)小論文01-24

科學(xué)小論文【熱】01-24

科學(xué)小論文【推薦】01-24

【熱】科學(xué)小論文01-24

科學(xué)小論文【精】12-23

【薦】科學(xué)小論文12-23

【推薦】科學(xué)小論文12-23

科學(xué)小論文15篇08-10

數學(xué)小論文怎么寫(xiě)08-04

科技小論文(15篇)07-15