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

?

編譯原理工程化教學(xué)方法研究

2015-05-30 00:26:33聞炳海劉鵬王利娥張超英
大學(xué)教育 2015年2期
關(guān)鍵詞:編譯原理教學(xué)方法

聞炳海 劉鵬 王利娥 張超英

[摘 要]《編譯原理》是計算機(jī)專業(yè)本科教學(xué)的一個難點。從教學(xué)理念出發(fā),深入分析了教材、教學(xué)對象、教學(xué)目標(biāo)、教學(xué)過程、鞏固與延伸等主題,提出編譯原理的工程化的教學(xué)方法。實際結(jié)合“語法分析”一章具體部署實施過程。該方法在實際教學(xué)過程中取得了比較好的效果。

[關(guān)鍵詞]編譯原理 教學(xué)方法 工程化教學(xué)

[中圖分類號] G642 [文獻(xiàn)標(biāo)識碼] A [文章編號] 2095-3437(2015)02-0126-03

一、引言

編譯所要完成的主要任務(wù)是將高級語言編寫的程序翻譯成計算機(jī)能夠理解的機(jī)器語言?,F(xiàn)代編譯程序所要面對的經(jīng)常是幾十萬、幾百萬行的大程序,在編譯原理的研究過程中形成了大量的概念、理論和算法,這直接造成了編譯原理這門課很難學(xué)?,F(xiàn)在,編譯原理課程是計算機(jī)專業(yè)的學(xué)生公認(rèn)的本科階段最難的課程之一,許多學(xué)生覺得編譯原理難以掌握。本文將工程化的方法引入編譯原理的教學(xué)過程中,通過一系列措施將編譯原理的學(xué)習(xí)過程簡單化、規(guī)范化,達(dá)到讓學(xué)生學(xué)好編譯原理的目標(biāo)。

二、教學(xué)理念

所謂工程化教學(xué)是指在教學(xué)過程中引入工程的概念,使教學(xué)過程有明確的時間安排,有遞進(jìn)的階段目標(biāo),有可以量化的指標(biāo),像管理工程項目一樣對教學(xué)作全程控制。我們要打造工程化的教學(xué)過程,通過選擇合適的教材、詳細(xì)考察學(xué)生情況、精心組織教學(xué)內(nèi)容、合理安排課后作業(yè)、設(shè)定逐步提高的開發(fā)目標(biāo),將學(xué)生引入一個可以量化的學(xué)習(xí)過程中。計算機(jī)科學(xué)有很強(qiáng)的理論背景,編譯原理更以邏輯嚴(yán)密、算法枯燥著稱。要求我們在教學(xué)過程中做到精簡講解、深入淺出,抓住理論的本質(zhì)講清楚。同時,計算機(jī)學(xué)科強(qiáng)調(diào)實踐性教學(xué),編譯原理課程更是圍繞著實際應(yīng)用而展開的。要求我們在教學(xué)過程中激勵學(xué)生動手,重視實驗和課后鍛煉,讓學(xué)生掌握實際運(yùn)用能力。我們提出了 “精簡理論、加強(qiáng)實踐”為中心思想的教學(xué)理念,掌握理論、動手實踐是學(xué)好編譯原理的不二法門。

三、教材和內(nèi)容

我們選擇的主講教材是清華大學(xué)的張素琴教授主編的《編譯原理》,這是目前國內(nèi)應(yīng)用最廣泛的教材,發(fā)行量達(dá)到20余萬冊。我們選擇的輔助教材是貝爾實驗室的Alfred等編寫的《編譯原理技術(shù)與工具》,這是一本世界著名的編譯原理教材,在編譯原理領(lǐng)域有很高的聲譽(yù)。因為封面畫了一條龍,所以被大家親切地稱為“龍書”。主講教材以理論分析為主,內(nèi)容清晰,邏輯嚴(yán)謹(jǐn);輔助教材有很好的實踐內(nèi)容,引導(dǎo)學(xué)生實際動手設(shè)計編譯程序。兩本教材風(fēng)格互補(bǔ),在章節(jié)編排上有很好的對應(yīng)關(guān)系,便于在教學(xué)中結(jié)合使用。下面就以“語法分析”一章為例,介紹一下我們設(shè)計的工程化教學(xué)過程。教材上“語法分析”一章主要內(nèi)容包括:LL(1)文法定義、文法判別算法、確定自頂向下分析、遞歸子程序法等。我們給出了一些補(bǔ)充內(nèi)容,包括分析典型的源代碼、自己開發(fā)的Yacc范例、自己開發(fā)的表達(dá)式語法分析程序等部分。通過這些案例的分析,讓學(xué)生在理論學(xué)習(xí)的基礎(chǔ)上學(xué)習(xí)如何將理論應(yīng)用到實際開發(fā),并熟悉流行的編譯輔助工具軟件的使用。

四、學(xué)生情況分析

編譯原理這門課是為計算機(jī)專業(yè)本科三、四年級的學(xué)生開設(shè)的。學(xué)生在學(xué)習(xí)編譯原理之前已經(jīng)學(xué)過多種編程語言,如VB、VC、Java、Delphi、Html。但是一個普遍的情況是“多數(shù)學(xué)生沒有認(rèn)真思考過,編譯程序的原理和開發(fā)方法”。學(xué)生不知道這些編譯軟件是如何設(shè)計出來的,更不知道不同編譯程序背后的理論依據(jù)。學(xué)生會感覺到編譯原理很神秘。而且編譯原理“難”聲在外,一些學(xué)生對編譯原理有畏懼心理。這是學(xué)生學(xué)習(xí)《編譯原理》的心理難點。我們要解決的問題是:如何為學(xué)生樹立學(xué)好編譯原理的信心?《編譯原理》這門課程比較獨立,理論自成體系,其他先修課程很少涉及編譯方面的內(nèi)容。教材內(nèi)容定義多,概念抽象,形式化的描述難以理解;算法多,步驟復(fù)雜,計算量大,學(xué)生很容易陷入細(xì)節(jié)問題不能自拔,產(chǎn)生困難和厭學(xué)心理。這些情況造成學(xué)生不容易接受編譯原理內(nèi)容,上課時容易產(chǎn)生惰性心理。這是學(xué)生學(xué)習(xí)《編譯原理》的理論難點。我們要解決的問題是:如何讓學(xué)生把理論學(xué)明白、會運(yùn)用?《編譯原理》的理論學(xué)習(xí)尚且不易,設(shè)計編譯程序更是一項非常復(fù)雜的工程,涉及多方面內(nèi)容,學(xué)生的編程經(jīng)驗不足以開發(fā)一個簡單的編譯程序,經(jīng)常會感覺不知從何入手。這是學(xué)生學(xué)習(xí)《編譯原理》的技術(shù)難點。我們要解決的問題是:如何引導(dǎo)學(xué)生動手實踐,給同學(xué)們找到一個很好的切入點?同時,我們觀察到,學(xué)生主觀上又想學(xué)好編譯原理。因為著名的編譯高手設(shè)計了學(xué)生每天使用的編譯程序,比如設(shè)計了C語言的Ritchie &Thompson、設(shè)計了C++語言的Bjarne Stroustrup、設(shè)計了Java語言的James Gosling、設(shè)計了C#語言的Anders Hejlsberg等等,這些傳奇式的編譯高手受到學(xué)生們的廣泛推崇。學(xué)生耳聞目染知道編譯原理的重要性,對編譯程序的開發(fā)感到好奇。這些都是我們引導(dǎo)學(xué)生學(xué)習(xí)的有利因素。在教學(xué)過程的設(shè)計當(dāng)中,我們針對這些教學(xué)難點安排教學(xué)內(nèi)容和教學(xué)方法,注意幫助學(xué)生克服困難,培養(yǎng)學(xué)生的學(xué)習(xí)興趣。

五、教學(xué)目標(biāo)和重點

結(jié)合這一章的內(nèi)容,我們制定了四個遞進(jìn)的教學(xué)目標(biāo)和三個教學(xué)重點。教學(xué)目標(biāo)包括對教材內(nèi)容的掌握和學(xué)習(xí)補(bǔ)充延伸的內(nèi)容。第一,掌握教材上的基本原理。包括文法的FIRST集、FOLLOW集和SELECT集的定義和計算方法、LL(1)文法的定義和判別算法、確定自頂向下分析、遞歸子程序法等內(nèi)容。這些基本理論學(xué)生必須要掌握。第二,學(xué)習(xí)使用語法分析自動生成工具。為學(xué)生介紹現(xiàn)在被廣泛使用的工具軟件Yacc。通過我們自己編寫的Yacc程序范例,讓學(xué)生掌握Yacc的結(jié)構(gòu)和用法。第三,掌握經(jīng)典的語法分析的源代碼。通過分析PL / 0語言的語法分析源代碼,讓學(xué)生了解語法分析的經(jīng)典實現(xiàn)。第四,引導(dǎo)學(xué)生動手實現(xiàn)語法分析器。引導(dǎo)學(xué)生對Yacc代碼和PL / 0語法分析代碼作個性化的修改和功能添加。通過這四個逐步深入的教學(xué)目標(biāo),引導(dǎo)學(xué)生不斷深化學(xué)習(xí)。教學(xué)重點包括了這一章的三個重要的定義和理論。第一,LL(1)文法的定義。這個定義包括First集、Follow集和Select集三個前導(dǎo)定義,每個定義都是一段形式化的描述,要求講課時要講清楚形式化定義的本質(zhì)。第二,LL(1)文法的判別算法。算法包括五個步驟:1.求出能推出ε的非終結(jié)符;2.計算First集;3.計算Follow集;4.計算Select集;5.判定是否是LL(1)文法。其中每個步驟又是一個獨立的算法。整個算法比較冗長,教材上用了六頁描述該算法。我們要用特別的方法讓學(xué)生學(xué)習(xí)和掌握。第三,語法分析的遞歸子程序法。遞歸子程序法的思想是對LL(1)文法中每個非終結(jié)符編寫一個遞歸過程,識別由該非終結(jié)符推出的符號串。PL / 0語法分析模塊就是采用遞歸子程序算法實現(xiàn)的。在分析PL / 0語法分析模塊的基礎(chǔ)上,我們還引導(dǎo)學(xué)生動手開發(fā)自己的語法分析程序。

六、教學(xué)過程

下面詳細(xì)介紹教學(xué)過程的安排,共分為六個步驟。第一步:提出問題,引發(fā)學(xué)生去思考。編譯的任務(wù)是將高級語言編寫的程序翻譯成計算機(jī)能夠直接理解的機(jī)器語言,這個翻譯過程不是一步完成的。編譯程序在進(jìn)行真正的翻譯和生成目標(biāo)代碼之前,首先要從結(jié)構(gòu)上把握源程序。語法分析的任務(wù)就是從結(jié)構(gòu)上分析程序,保證源程序語法結(jié)構(gòu)正確并分析得到程序的各個語法成分。讓我們考慮一個簡單的例子,老師是如何判斷小學(xué)生所造的句子語法結(jié)構(gòu)上是否正確?比如,“我是學(xué)生”,我們說這個句子是語法結(jié)構(gòu)正確的。那是因為我們可以將這個句子分為三部分,“我____是____學(xué)生”,每一部分正確的對應(yīng)了“主語____謂語____賓語”三種語法成分,所以我們說這個句子是語法正確的。那么,編譯程序是如何對源程序做語法分析的呢?比如,“if i<10 then n=0 else n=1”,這個簡單的程序語句。編譯程序首先從中分析出關(guān)鍵字“if、then、else”,然后分析出表達(dá)式“i<10、n=0、n=1”,表達(dá)式和關(guān)鍵字按正確的形式排列,所以這是一個語法結(jié)構(gòu)正確的語句。實際應(yīng)用的編譯程序是能夠處理幾百萬行代碼的大程序,它的語法分析方法當(dāng)然更復(fù)雜,比如這一章所涉及的LL(1)文法、遞歸子程序法、預(yù)測分析法等,都很復(fù)雜。但是,他們都是建立在這樣一個簡單的基本概念之上的,語法分析就是從“結(jié)構(gòu)上分析程序”。在這里我們運(yùn)用“先行組織者”原理,提出問題,舉出范例,引導(dǎo)學(xué)生去思考語法分析方法。第二步:精簡講解,抓住理論的本質(zhì)。例如教材上Follow集的定義為:設(shè)G=(VT,VN,S,P)是上下文無關(guān)文法,A∈VN,S是開始符號,#是輸入串的結(jié)束符(輸入串括號),F(xiàn)OLLOW(A)={a|S*→μAβ且a∈VT,a∈FIRST(β),μ∈VT*,β∈V+},若S *→μAβ且β→ε,則#∈FOLLOW(A)。學(xué)生很難從這樣形式化的描述中看懂Follow集的到底是用來干什么的。我們在上課的時候就要講清楚,F(xiàn)ollow集就是用來考察“非終結(jié)符能夠以哪些字符為后繼”這樣一個簡單的本質(zhì)。抓住本課程定義抽象,實際應(yīng)用簡單的特點,讓學(xué)生認(rèn)識到編譯原理其實很簡單。第三步:小題多練,采用搭積木的方式學(xué)習(xí)。教材上用了6頁來講解LL(1)文法的判別算法,如果直接將一道習(xí)題交給學(xué)生去完成,學(xué)生顯然難以接受。在講課的時候,我們先講算法結(jié)構(gòu),然將一個大題分為幾個階段的小題,穿插演練,最后組成一個完整的解題過程。讓學(xué)生體會到雖然整個算法十分冗長,但是每一步都很簡單。第四步:互動教學(xué),讓學(xué)生積極參與。課堂教學(xué)過程中要鼓勵學(xué)生提出想法和思路,盡可能對學(xué)生的發(fā)言給予肯定的評價,要密切注意學(xué)生的反饋信息,有針對性地講解關(guān)鍵知識點。要讓學(xué)生積極參與教學(xué)過程,跟上我們的講解思路,盡量消除學(xué)生上課的惰性心理。第五步:分組作業(yè),降低學(xué)生的困難感。將全班同學(xué)劃分為幾個小組,每組5至7名同學(xué)。對于同一個主題,不同小組可以選擇不同方向。比如設(shè)計C語言文法,可以化為幾個子集讓不同小組實現(xiàn),也可以不同小組完成不同任務(wù),然后互相討論學(xué)習(xí)。將理論基礎(chǔ)好、動手能力強(qiáng)的同學(xué)分配到各個小組,以先學(xué)帶動后學(xué),降低學(xué)生的學(xué)習(xí)困難感,避免動手能力差的同學(xué)失去信心。第六步:實際運(yùn)用,DIY自己的語法分析器。給學(xué)生布置一些遞進(jìn)的實踐項目,比如“設(shè)計最簡單的四則運(yùn)算的語法分析器”、“學(xué)習(xí)用YACC設(shè)計C語言語法分析器”、“學(xué)習(xí)用C語言實現(xiàn)一個簡單的語法分析器”等。由簡單到復(fù)雜,把課堂講授、實驗課和課后鍛煉有機(jī)地結(jié)合起來。以上就是我們教學(xué)方法的六個主題:提出問題、精簡講解、小題多練、互動教學(xué)、分組作業(yè)、實際運(yùn)用。從理論學(xué)習(xí)到動手實踐,有針對性地解決學(xué)生學(xué)習(xí)時所遇到的一系列問題,為學(xué)生打造一個循序漸進(jìn)、深入淺出的完整學(xué)習(xí)過程。

接下來我們以語法分析為例,介紹一下如何引導(dǎo)學(xué)生動手實踐語法分析理論。第一,一步一步教學(xué)生如何用Yacc創(chuàng)建語法分析項目,詳細(xì)介紹每個步驟的含義。第二,一步一步教學(xué)生配置VC環(huán)境用于語法分析項目的編譯,詳細(xì)每個環(huán)境參數(shù)的作用。學(xué)生在實踐的時候遇到的最主要的困難就是如何使用工具軟件,我們通過詳細(xì)的講解幫助學(xué)生邁出語法分析的第一步。第三,用簡單的例子講解Yacc的結(jié)構(gòu)和用法,讓學(xué)生體會語法分析其實不神秘。第四,把我們自己寫的文法范例在課堂上和同學(xué)們一起編寫、調(diào)試、運(yùn)行,實時展現(xiàn)不同文法分析的結(jié)果。第五,將我們自己用C語言開發(fā)的表達(dá)式語法分析程序作為補(bǔ)充練習(xí),讓學(xué)生去修改、添加功能,體會語法分析的思路。整個過程充分考慮了學(xué)生的能力培養(yǎng),難度逐步加大,階段目標(biāo)明確,便于在教學(xué)過程中實施。

七、教學(xué)效果

在實際教學(xué)過程中,編譯原理的工程化教學(xué)方法取得了較好的教學(xué)效果,學(xué)生保持較高的學(xué)習(xí)積極性,學(xué)生評教一直保持較高的分?jǐn)?shù)。在課堂上,學(xué)生能夠積極的參與教學(xué)過程,把握知識脈絡(luò)并掌握知識點;在課余時間里,學(xué)生能夠較好的完成作業(yè)并進(jìn)行探索和學(xué)習(xí)。通過系統(tǒng)的學(xué)習(xí)編譯原理,學(xué)生對軟件開發(fā)有了深入認(rèn)識,了解了程序優(yōu)化和并行計算的方法和重要性,為編寫高效、高質(zhì)量的代碼打下了基礎(chǔ)。此外,本文第一作者以“編譯原理的工程化教學(xué)”為主題參加廣西師范大學(xué)第三屆“青年教師說課比賽”,獲得了理科組第一名的好成績;并指導(dǎo)本科生以“基于泛型編程的編譯器研究”為題目申請并獲得廣西師范大學(xué)創(chuàng)新性實驗基金資助。

八、結(jié)語

在整個教學(xué)過程中,我們首先幫助學(xué)生端正學(xué)習(xí)態(tài)度,破除《編譯原理》難學(xué)的迷信。然后采用精簡講解、小題多練等方式,讓學(xué)生體會理論并不深奧。在理論學(xué)習(xí)的基礎(chǔ)上,引導(dǎo)學(xué)生動手實踐,設(shè)計由易到難的實踐項目,在此過程中打造屬于同學(xué)們自己的編譯程序,培養(yǎng)學(xué)習(xí)成就感。最終達(dá)到懂得理論、學(xué)會設(shè)計、學(xué)好《編譯原理》這個總目標(biāo)。作為教學(xué)的鞏固與延伸措施,我們會引導(dǎo)同學(xué)做更多的實踐。比如C語言的語法分析、SQL語言的語法分析、嘗試使用C++的Boost.Spirit開發(fā)包等等。同時,和學(xué)生一起參與開發(fā)過程,用電話、Emai等方式與同學(xué)保持密切聯(lián)系,及時解答同學(xué)們學(xué)習(xí)過程中遇到的問題。不但要讓學(xué)生學(xué)懂理論、學(xué)會運(yùn)用,更要讓學(xué)生記得牢固。

我們將整個教學(xué)過程看作是一個工程項目,將工程中目標(biāo)明確、量化管理的特點引入到編譯原理的教學(xué)過程中,收到了比較好的教學(xué)效果,也受到了學(xué)生的歡迎。

[ 參 考 文 獻(xiàn) ]

[1] 張素琴,呂映芝,蔣維杜,戴桂蘭.編譯原理[M].北京:清華大學(xué)出版社,2007.

[2] Alfred等著,李建中等譯.編譯原理技術(shù)與工具[M].北京:機(jī)械工業(yè)出版社,2003.

[責(zé)任編輯:黃緊德]

猜你喜歡
編譯原理教學(xué)方法
初中英語寫作教學(xué)方法初探
甘肅教育(2020年2期)2020-09-11 08:01:42
教學(xué)方法與知識類型的適宜
《編譯原理》教學(xué)方法初探
基于專業(yè)規(guī)范的編譯原理混合式教學(xué)改革
軟件學(xué)院編譯原理實踐課程的教學(xué)探索
基于MOOC的編譯原理分階段課程教學(xué)研究
營造興趣啟蒙式學(xué)習(xí)氛圍的編譯原理首課設(shè)計
“編譯原理”課程教學(xué)改革初探
實用型中醫(yī)人才培養(yǎng)中慕課教學(xué)方法的探討
文言文教學(xué)方法實踐初探
翁牛特旗| 淅川县| 宝应县| 从化市| 宁安市| 铁力市| 子长县| 宁乡县| 通河县| 潞西市| 高安市| 神农架林区| 肇东市| 镇赉县| 康保县| 临西县| 阿拉善右旗| 湛江市| 龙口市| 鱼台县| 遂川县| 齐齐哈尔市| 伊川县| 平果县| 肇东市| 合川市| 宁波市| 长武县| 卢氏县| 海原县| 唐河县| 泾源县| 塔河县| 许昌县| 英吉沙县| 天气| 桦南县| 建瓯市| 余姚市| 宁武县| 青阳县|