国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

編譯原理教學(xué)現(xiàn)狀與創(chuàng)新研究

2018-01-22 07:17崔光宇
無(wú)線互聯(lián)科技 2017年24期
關(guān)鍵詞:課程實(shí)踐

崔光宇

摘 要:編譯原理是計(jì)算機(jī)專業(yè)的主干課程,主要是為了使學(xué)生了解高級(jí)程序設(shè)計(jì)語(yǔ)言源程序翻譯成計(jì)算機(jī)能處理的目標(biāo)代碼的整個(gè)過(guò)程,在整個(gè)專業(yè)教學(xué)體系中占有著重要的地位。文章分析了編譯原理教學(xué)過(guò)程的現(xiàn)狀以及存在的一些問(wèn)題,進(jìn)行了一些研究,最主要的是針對(duì)關(guān)鍵知識(shí)點(diǎn)設(shè)計(jì)實(shí)驗(yàn),然后進(jìn)一步將編譯原理的各個(gè)部分整合為一個(gè)簡(jiǎn)單的編譯器,把理論和實(shí)踐結(jié)合起來(lái),加深學(xué)生對(duì)各部分知識(shí)的理解,同時(shí)也能提高學(xué)生設(shè)計(jì)大型系統(tǒng)的能力。

關(guān)鍵詞:編譯原理;課程實(shí)踐;教學(xué)創(chuàng)新研究

編譯器產(chǎn)生于20世紀(jì)60年代,在計(jì)算機(jī)學(xué)科技術(shù)發(fā)展中起到非常重要的作用,是計(jì)算機(jī)不可缺少的工具。掌握編譯器的原理對(duì)于計(jì)算機(jī)學(xué)習(xí)人員是最重要的基礎(chǔ)知識(shí)。在高校教學(xué)中,編譯原理主要是為了使學(xué)生了解高級(jí)語(yǔ)言源程序翻譯成計(jì)算機(jī)能處理的目標(biāo)代碼的整個(gè)過(guò)程,主要包括詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、中間代碼優(yōu)化以及目標(biāo)代碼生成這6大部分。通過(guò)本課的學(xué)習(xí),學(xué)生可以系統(tǒng)掌握編譯的基本原理和基本技術(shù),對(duì)之前學(xué)習(xí)過(guò)的程序語(yǔ)言的設(shè)計(jì)與和實(shí)現(xiàn)有更好的理解,提高實(shí)踐能力。

編譯原理課程是計(jì)算機(jī)專業(yè)最難的課程之一,原因如下:(1)理論性很強(qiáng),基本原理比較抽象,算法描述主要使用形式化語(yǔ)言,比如,有窮自動(dòng)機(jī)、上下文無(wú)關(guān)文法等,與以往的學(xué)習(xí)有很大的差別,學(xué)生很難理解算法背后的精髓。(2)教學(xué)方式較為單一,因?yàn)槔碚撝R(shí)過(guò)多,大部分學(xué)校為了保證教學(xué)進(jìn)度,時(shí)常以灌輸式為主,課堂上主要是編譯系統(tǒng)原理為主,忽視了具體實(shí)例的講解。(3)在實(shí)踐方面,編譯的算法較為復(fù)雜,對(duì)學(xué)生的編程能力以及邏輯思維能力都有很高的要求。因此,如何使用適當(dāng)?shù)姆椒ㄌ岣哒n程的教學(xué)效果,是當(dāng)前編譯原理教學(xué)中需要探討的重要問(wèn)題。

1 研究現(xiàn)狀以及存在的問(wèn)題

1.1 國(guó)內(nèi)外研究現(xiàn)狀

國(guó)外大學(xué)從20世紀(jì)60年代開(kāi)始開(kāi)設(shè)編譯課程,較為經(jīng)典的編譯原理教程有Aho等[1]編著的《Compilers: Principles, Techniques and Tools》(中文名:《編譯:原理,技術(shù)與工具》)與Appel等[2]編著的《Modern Compiler Implementation In Java/C++/ML》(中文名:《現(xiàn)代編譯原理—C語(yǔ)言描述》),這兩本書在編譯原理領(lǐng)域分別被稱為“龍書”“虎書”?!褒垥背霈F(xiàn)于1986年,第2版刪除了語(yǔ)法分析的算符優(yōu)先分析法、語(yǔ)法翻譯中遞歸計(jì)算方法等過(guò)時(shí)的技術(shù),增加了面向?qū)ο蟮木幾g、類型檢查等比較新新技術(shù)?!盎敝邪珻版本、Java版本,在“龍書”知識(shí)點(diǎn)基礎(chǔ)之上,增加了循環(huán)優(yōu)化等內(nèi)容。

近年來(lái),國(guó)內(nèi)學(xué)校在編譯原理教學(xué)方面也積累了大量的經(jīng)驗(yàn),上海交通大學(xué)張冬茉等[3]提出了現(xiàn)階段進(jìn)行大型編譯原理課程設(shè)計(jì)的教學(xué)模式和方法,使學(xué)生能夠通過(guò)實(shí)現(xiàn)一個(gè)實(shí)用的編譯系統(tǒng),提高對(duì)編譯原理的認(rèn)識(shí)。合肥師范學(xué)院祖弦等[4]針對(duì)核心知識(shí)點(diǎn),設(shè)計(jì)實(shí)驗(yàn)教學(xué)案例,探討在實(shí)驗(yàn)案例驅(qū)動(dòng)下的編譯原理課程教學(xué)創(chuàng)新方案。

1.2 存在的問(wèn)題

1.2.1 學(xué)生對(duì)于課程的認(rèn)識(shí)模糊

大部分學(xué)生對(duì)于編譯原理的認(rèn)識(shí)在于,認(rèn)為學(xué)習(xí)編譯原理的目的,是構(gòu)建一個(gè)完整的編譯器。然而大部分大學(xué)生在畢業(yè)后,制作編譯器的可能性很小,學(xué)生很難提高學(xué)習(xí)興趣。

1.2.2 編譯原理理論抽象,算法比較復(fù)雜

相較于以往學(xué)習(xí)的課程,編譯原理課程對(duì)于學(xué)生而言十分的抽象,比如有窮自動(dòng)機(jī)等,學(xué)生理解不易,同時(shí),課程中有很多復(fù)雜的算法,對(duì)于大部分大學(xué)生來(lái)說(shuō)都很難掌握。

1.2.3 程序設(shè)計(jì)要求比較高

課程設(shè)計(jì)部分要求學(xué)生使用學(xué)過(guò)的C,C++,C#,Java等語(yǔ)言實(shí)現(xiàn),由于算法本身比較復(fù)雜,對(duì)學(xué)生編程能力有較高的要求,然而大部分學(xué)生在之前的學(xué)習(xí)中并沒(méi)有很好地掌握以上編程語(yǔ)言,使得課程設(shè)計(jì)更加困難。

2 教學(xué)創(chuàng)新措施

2.1 明確學(xué)生學(xué)習(xí)編譯原理的作用

雖然很少有人從事編譯方面的工作,但是學(xué)習(xí)編譯的整個(gè)過(guò)程對(duì)于學(xué)生學(xué)習(xí)計(jì)算機(jī)科學(xué)的理論、技術(shù)和方法都是很有效地提高,而且編譯原理的很多原理、算法不僅局限于編譯本身。學(xué)好編譯原理的一些算法和原理,對(duì)計(jì)算機(jī)很多問(wèn)題的解決都能夠起到很好的作用。此外,完整地編寫一個(gè)編譯程序,為學(xué)生提供了很好的編寫大型程序的實(shí)例,非常有利于學(xué)生以后對(duì)于大型程序的編寫。

同時(shí),在大三課程中設(shè)置編譯原理,其學(xué)習(xí)中融合了多門以往的課程內(nèi)容,比如高級(jí)語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、匯編語(yǔ)言等,這使得學(xué)生能更好地理解以往學(xué)習(xí)內(nèi)容的實(shí)際應(yīng)用,還能更好地提高學(xué)生的程序設(shè)計(jì)能力。

2.2 教學(xué)方法的創(chuàng)新

編譯原理課程理論性很強(qiáng),實(shí)踐性也很強(qiáng),是兩者相結(jié)合的課程。理論部分知識(shí)枯燥、抽象、難學(xué)。所以在講理論時(shí)可以將理論、算法部分采用實(shí)例驅(qū)動(dòng)的方法,將抽象的知識(shí)結(jié)合到一個(gè)個(gè)實(shí)際問(wèn)題中去。在解決問(wèn)題過(guò)程中,介紹基本原理和算法,這樣學(xué)生可以很好地理解原理和算法在實(shí)際問(wèn)題中的作用,提高學(xué)生的分析問(wèn)題、解決問(wèn)題的能力。

2.3 編譯原理實(shí)驗(yàn)環(huán)節(jié)的設(shè)計(jì)

實(shí)驗(yàn)是培養(yǎng)學(xué)生應(yīng)用能力最直接的手段,鑒于學(xué)生的編程能力,增加適當(dāng)難度的實(shí)驗(yàn),加強(qiáng)學(xué)生對(duì)重要知識(shí)點(diǎn)的認(rèn)識(shí)和理解。實(shí)驗(yàn)總體分為兩部分:一是對(duì)編譯原理課程中的關(guān)鍵方法的實(shí)驗(yàn),二是整體的設(shè)計(jì)一個(gè)簡(jiǎn)單的編譯器。

2.3.1 詞法分析器的設(shè)計(jì)

詞法分析器實(shí)驗(yàn):制作一個(gè)讀單詞過(guò)程,源程序保存在文本文件中,讀取該文件,識(shí)別出各個(gè)具有獨(dú)立意義的單詞,即基本保留字、標(biāo)識(shí)符、常數(shù)、運(yùn)算符、分界符5大類。依次輸出各個(gè)單詞的內(nèi)部單詞種別及單詞符號(hào)自身值,遇到錯(cuò)誤時(shí)可顯示“Error”,然后跳過(guò)錯(cuò)誤部分繼續(xù)顯示。

2.3.2 語(yǔ)法分析器的設(shè)計(jì)

語(yǔ)法分析器實(shí)驗(yàn):設(shè)計(jì)、開(kāi)發(fā)一個(gè)高級(jí)語(yǔ)言的LL(1)語(yǔ)法分析程序,實(shí)現(xiàn)對(duì)源程序的語(yǔ)法檢查和結(jié)構(gòu)分析,加深學(xué)生對(duì)頂向下語(yǔ)法分析、First集、Follow集、Select集、判斷LL(1)文法的方法、文法等價(jià)變換、LL(1)分析表的構(gòu)造、對(duì)某一輸入串的分析過(guò)程的理解。endprint

2.3.3 語(yǔ)義檢查和中間代碼生成的設(shè)計(jì)

語(yǔ)法檢查和中間代碼生成實(shí)驗(yàn):設(shè)計(jì)、開(kāi)發(fā)一個(gè)高級(jí)語(yǔ)言的語(yǔ)義檢查和中間代碼生成程序,加深對(duì)語(yǔ)法制導(dǎo)翻譯技術(shù)、類型確定、類型檢查、常見(jiàn)可執(zhí)行語(yǔ)句(如賦值語(yǔ)句、條件語(yǔ)句、循環(huán)語(yǔ)句)翻譯技術(shù)的理解。

2.3.4 代碼優(yōu)化的設(shè)計(jì)

代碼優(yōu)化實(shí)驗(yàn):設(shè)計(jì)、開(kāi)發(fā)一個(gè)高級(jí)語(yǔ)言的代碼優(yōu)化程序,包括簡(jiǎn)單的局部?jī)?yōu)化、循環(huán)優(yōu)化和全局優(yōu)化,加深學(xué)生對(duì)代碼優(yōu)化重要性的認(rèn)識(shí)。

2.3.5 目標(biāo)代碼生成的設(shè)計(jì)

目標(biāo)代碼生成實(shí)驗(yàn):目標(biāo)代碼生成是把源程序的中間代碼轉(zhuǎn)換成等價(jià)的目標(biāo)代碼,在這里,設(shè)計(jì)、開(kāi)發(fā)一個(gè)簡(jiǎn)單的代碼生成器,能將中間代碼(四元式形式)轉(zhuǎn)換成目標(biāo)代碼。設(shè)計(jì)過(guò)程中,引進(jìn)目標(biāo)指令與四元式對(duì)照表,便于轉(zhuǎn)換。

2.3.6 編譯器的設(shè)計(jì)

以上5組實(shí)驗(yàn)對(duì)于編譯過(guò)程中的6大部分重點(diǎn)方法進(jìn)行了實(shí)踐,由于比較分散,大部分學(xué)生不能很好地理解每個(gè)部分是如何在整個(gè)編譯系統(tǒng)中達(dá)到協(xié)調(diào)工作的。經(jīng)過(guò)一個(gè)學(xué)期的學(xué)習(xí),開(kāi)設(shè)一周左右的集中課程設(shè)計(jì)。目的是為了設(shè)計(jì)一個(gè)相對(duì)完整的編譯器。題目較為簡(jiǎn)單,學(xué)生可以根據(jù)學(xué)生自身情況自行設(shè)計(jì)一個(gè)適合自己難度的做法,基礎(chǔ)較差的同學(xué),可以針對(duì)題目設(shè)計(jì)一些最為基礎(chǔ)的算法,而基礎(chǔ)較好的同學(xué)可以將編譯中多種算法融入編譯器中,最終生成一個(gè)簡(jiǎn)單的編譯器。通過(guò)這個(gè)設(shè)計(jì),學(xué)生能夠系統(tǒng)地理解編譯的整個(gè)過(guò)程。

3 結(jié)語(yǔ)

在編譯原理課程教學(xué)過(guò)程中,針對(duì)現(xiàn)存的一些問(wèn)題,本文進(jìn)行了一些創(chuàng)新研究。最為重要的措施是提出了一套實(shí)驗(yàn)教學(xué)方法,很好地提高了學(xué)生學(xué)習(xí)興趣,更好地讓學(xué)生理解和掌握了課程重要算法,并通過(guò)制作一個(gè)編譯器,把編譯原理的所有內(nèi)容達(dá)到一個(gè)融會(huì)貫通的目的,培養(yǎng)了學(xué)生編程能力,達(dá)到了提高教學(xué)質(zhì)量的目的。

[參考文獻(xiàn)]

[1]AHO A V,SETHI R,ULLMAN J D.Compilers:principles, techniques and tools[M].New York:Additions Wesley,1986.

[2]APPEL A W,JEOS P.Modern compiler implementation in Java/C++/ML[M].New York:Cambridge,1997.

[3]張冬茉,方習(xí)文.編譯原理課程設(shè)計(jì)的教學(xué)實(shí)踐和改革[J].實(shí)驗(yàn)室研究與探索,2012(11):134-137.

[4]祖弦,朱強(qiáng),謝飛.實(shí)驗(yàn)案例驅(qū)動(dòng)的編譯原理教學(xué)改革探討[J].合肥師范學(xué)院學(xué)報(bào),2017(3):74-76.

Abstract:Compiler principle is the main course of computer science, primarily to enable students to understand the entire process of source code of high-level programming language translated into object code which computer can handle, it occupies an important position in the whole teaching system. This article analyzes the current situation and problems in teaching compiler principle, explores the teaching contents and method. The most important thing is to design experiments for key knowledge points, and then integrated the various parts into a simple compiler, combined theory with practice, deepened students understanding of the various parts of knowledge, also improve the ability to design large systems.

Key words:compiler principle; curriculum practice; research on teaching innovationendprint

猜你喜歡
課程實(shí)踐
應(yīng)用型人才培養(yǎng)目標(biāo)下管理會(huì)計(jì)課程實(shí)踐探析
軟件學(xué)院編譯原理實(shí)踐課程的教學(xué)探索
Practice and Evaluation of Computational Thinking Cultivation Based on a Ladder Type System
項(xiàng)目進(jìn)階驅(qū)動(dòng)的JaVaEE課程實(shí)踐教學(xué)改革探索
電子信息工程專業(yè)數(shù)字信號(hào)處理課程改革與研究
談新課程理念下的初中歷史課堂教學(xué)設(shè)計(jì)
高職機(jī)電設(shè)備維修與管理專業(yè)入門教育課程實(shí)踐與探索
星子县| 静宁县| 额济纳旗| 古田县| 德令哈市| 通山县| 侯马市| 边坝县| 获嘉县| 格尔木市| 承德市| 栖霞市| 澄城县| 巴马| 利辛县| 兰考县| 阜南县| 宿迁市| 闸北区| 怀来县| 上杭县| 灵丘县| 孟村| 新民市| 富阳市| 温州市| 怀柔区| 宜兰县| 陆丰市| 逊克县| 凯里市| 囊谦县| 阜宁县| 区。| 桐城市| 东阿县| 平塘县| 乌兰县| 平昌县| 天柱县| 三亚市|