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

?

編譯原理教學(xué)方法研討與實踐考核改革

2017-05-12 11:21高珍衛(wèi)志華黃杰杜博聞
計算機教育 2017年4期
關(guān)鍵詞:教學(xué)實踐自主學(xué)習

高珍+衛(wèi)志華+黃杰+杜博聞

(1.同濟大學(xué) 軟件學(xué)院,上海 201804; 2.同濟大學(xué) 電子與信息工程學(xué)院,上海 201804)

摘 要:編譯原理是計算機專業(yè)的核心課程和難點課程,該課程的教改一直是熱點問題。文章基于多年編譯原理授課經(jīng)驗,針對課程的理論教學(xué)提出一些有效的教學(xué)方法,包括應(yīng)用歸納思維、采取實時檢測、創(chuàng)造自主學(xué)習、復(fù)原問題求解等;同時提出從實踐平臺的創(chuàng)建和考核方面進行思考和改革,重視過程監(jiān)督,利用GitHub平臺使實踐考核更為公正。

關(guān)鍵詞:編譯原理;自主學(xué)習;歸納思維;教學(xué)實踐

0 引 言

編譯原理是計算機專業(yè)的一門核心課程,內(nèi)容涉及形式語言、有限自動機等抽象內(nèi)容,一向被認為是最難的計算機專業(yè)課程[1]。教師感覺難教,學(xué)生感覺難學(xué),課程內(nèi)容抽象和枯燥、算法復(fù)雜且不易理解、實踐考核難通過等都是師生公認的問題。國內(nèi)學(xué)生在就業(yè)后較少從事與編譯器設(shè)計開發(fā)相關(guān)的工作,這也使得他們的學(xué)習積極性不高。對于授課教師而言,如何提高該課程的教學(xué)質(zhì)量、消除學(xué)生的畏難心理、提高其學(xué)習興趣、改善學(xué)習效果,是一個需要研究的課題。

鑒于編譯原理課程的重要性和挑戰(zhàn)性,對其教學(xué)方法的嘗試和探索一直是研究的熱點。很多學(xué)者提出了自己的見解,如有學(xué)者從教育心理學(xué)(包括人本主義教學(xué)理論和構(gòu)建主義學(xué)習理論)出發(fā)考慮教學(xué)方法的改革[2];有學(xué)者從目標驅(qū)動著手構(gòu)建編譯原理課程實施的目標體系,以幫助學(xué)生更好地自主學(xué)習[3];也有學(xué)者提出采用隱喻語言來鍛煉學(xué)生的抽象思維能力[4],采用啟發(fā)式教學(xué)來提高教學(xué)質(zhì)量[5]。同濟大學(xué)軟件學(xué)院和電子與信息工程學(xué)院均開設(shè)了編譯原理專業(yè)課程,教師團隊互相學(xué)習,積極探索和提高教學(xué)方法,以課程內(nèi)容為導(dǎo)向,提出并凝練了4種教學(xué)方法,同時對課程實踐平臺的創(chuàng)建和考核方法也進行了探討和實踐。

1 教學(xué)方法研討

在編譯原理課的授課中積極嘗試改革教學(xué)方法以改善課程的教學(xué)質(zhì)量,取得了良好的效果。這些教學(xué)方法包括應(yīng)用歸納思維、增加隨堂練習、創(chuàng)造自主學(xué)習機會、復(fù)原問題求解等。經(jīng)過實踐驗證,這些教學(xué)方法能夠有效提高學(xué)生的學(xué)習興趣,降低學(xué)習難度,改善教學(xué)效果。

1.1 應(yīng)用歸納思維

和演繹思維相比,人類更容易接受歸納思維,但大多數(shù)編譯原理中文教材都采取了演繹思維的方式來組織教材內(nèi)容,這給學(xué)生自學(xué)或者預(yù)習編譯原理課程帶來困難。為了幫助學(xué)生更容易理解看似復(fù)雜的模型和算法,以一個具體的例子來講解是較好的做法。如在自上而下語法分析章節(jié)中講解到消除文法的左遞歸算法時,先拿出一個簡單的具有左遞歸的文法,以它為例,讓學(xué)生探索如何消除其左遞歸,待這個例子講解完之后再介紹該算法,就顯得清晰易懂。

1.2 增加隨堂練習

在講解完重要知識點尤其是難點之后,鼓勵教師加入隨堂練習進行實時檢測,一方面可以考核學(xué)生是否理解了教授的知識點,另外也可以提高學(xué)生的注意力。根據(jù)本教學(xué)團隊的授課經(jīng)驗,隨堂練習能夠很準確地反映出學(xué)生對知識點的掌握程度,如果學(xué)生對知識點有不正確的理解,也能通過練習來迅速糾正。隨堂練習提高了學(xué)生對課程的參與度,通常只要學(xué)生認真聽講,在老師的引導(dǎo)下,隨堂練習一般都能正確完成,這種“積極反饋”現(xiàn)象也會給予學(xué)生鼓勵和成就感,構(gòu)成學(xué)習的良性循環(huán)。

一些老師可能認為編譯原理課程本身的教學(xué)任務(wù)重,增加隨堂練習在時間方面有難度,但是如果只顧完成教學(xué)任務(wù)而忽視學(xué)生是否掌握了授課內(nèi)容,就難免舍本逐末。當然為了控制時間,隨堂練習的設(shè)計就比較重要,目標是考查知識點,需要控制計算量,題目規(guī)模宜小不宜大,宜簡不宜繁。通過觀察學(xué)生在練習中發(fā)生的錯誤可以直接定位到學(xué)生的薄弱知識點,立刻進行重復(fù)講解,以使關(guān)鍵知識點都能夠被學(xué)生理解和接受。

如考核NFA如何通過狀態(tài)消去法轉(zhuǎn)換為正規(guī)表達式,可以采用如圖1所示的NFA來測試,它基本覆蓋了所有的狀態(tài)消去規(guī)則。

又如考察賦值語句的語義分析,可以讓學(xué)生根據(jù)賦值語句的文法產(chǎn)生式(如圖2所示)及語義規(guī)則寫出賦值語句A:=B*(-C+D)的三地址代碼,這個語句很簡單,卻全方面考核了學(xué)生對屬性文法和語法制導(dǎo)翻譯方法的掌握情況。

1.3 創(chuàng)造自主學(xué)習

多數(shù)高校會將編譯原理課安排到大三來上,一般來說,這些高年級學(xué)生已經(jīng)具備了較好的自主學(xué)習能力,所以考慮將較難的課后習題單獨摘錄出來,讓學(xué)生分組完成,然后抽出一定的課堂時間進行答辯與講解。這樣有利于學(xué)生自主、自助地學(xué)習和探索,使他們對自己解答的題目和相關(guān)知識點掌握得更加牢固。對教材中的可選性章節(jié),也允許學(xué)生分組進行研究性學(xué)習,希望將教材中講解的基本知識點與拓展的可選知識點相結(jié)合,以實現(xiàn)知識的拓展性。拓展學(xué)習成果也可以作為加分因素,以此來鼓勵學(xué)生。

1.4 復(fù)原問題求解

編譯原理中有很多經(jīng)典的算法,如算符優(yōu)先分析方法。如果采用傳統(tǒng)的方法,先介紹什么是算符優(yōu)先文法、該文法對算符的約束條件、算符之間的優(yōu)先關(guān)系的定義,以及FIRSTVT和LASTVT集合的計算、算符優(yōu)先關(guān)系表的構(gòu)建和算符優(yōu)先分析算法的設(shè)計。順著這個思路(往往也是教材的思路),雖然也能把算符優(yōu)先分析方法講解清楚,但給學(xué)生增加了很多困惑:勤于思考的學(xué)生會困惑為何引入算符的優(yōu)先級?優(yōu)先關(guān)系為何這樣定義,而不是另外一種方式?為何要引入素短語等。這些困惑給他們帶來了學(xué)習上的困難,也很容易讓他們對算法的學(xué)習失去興趣。

針對這種情況,建議“復(fù)原問題求解過程”,一步步引導(dǎo)學(xué)生,使他們從被動思考轉(zhuǎn)為主動探索。知識的講解循序漸進,使得算法的設(shè)計、新概念及術(shù)語的引入都變得水到渠成,使被動地學(xué)習、接受新的概念和知識變成積極地創(chuàng)造概念和知識。

以算符優(yōu)先分析方法為例,可以先拋出一個問題,如對一個算術(shù)表達式文法G{ E→E+T│T; T→T*F│F; F→P↑F│P; P→(E)│i},對于符合該文法的一個語句i+(i*i)+i,采用規(guī)范規(guī)約,我們會得到圖3(a)中的語法分析樹,然后向?qū)W生拋出問題:是否可以把這個語法分析樹簡化為圖3(b)中的語法分析樹?顯然圖3(b)中的語法分析樹用于語法分析,步驟更少,效率更高。對比兩棵樹,同學(xué)們不難發(fā)現(xiàn),它們的區(qū)別主要在于后者避免了單非終結(jié)符到單非終結(jié)符的歸約。接下來可以引導(dǎo)學(xué)生找出圖3(b)中語法分析樹的規(guī)約短語,顯然有i, N*N, N+N??梢园堰@些可規(guī)約短語定義為素短語,讓學(xué)生給出其定義(即含有終結(jié)符且不包含更小的素短語),然后開始引導(dǎo)學(xué)生探討如何利用程序自動識別這些素短語,提示是否可以結(jié)合產(chǎn)生式,引入這些終結(jié)符(如給一個新名字:算符)的優(yōu)先關(guān)系(如>,=,<)來識別素短語。經(jīng)過課堂檢驗,學(xué)生能夠給出建議:同時出現(xiàn)在產(chǎn)生式左側(cè)的算符優(yōu)先級相同,采用“=”,其他算符的關(guān)系可以采用“<”或“>”表示。此時教師才開始介紹算符優(yōu)先分析方法中對于算符的優(yōu)先關(guān)系的定義,并給出素短語的識別算法。至此,學(xué)生很清楚引入算符優(yōu)先關(guān)系的目的是為了識別出素短語,加速語法分析的過程,并且他們也會非常清楚這種方法的不足:當省略的單非終結(jié)符到單非終結(jié)符的歸約不符合圖3(a)中 語法樹的時候,使用圖3(b)中語法樹會帶來誤判,把不合法的語句判斷為合法。

這種復(fù)原問題求解過程的方法能夠讓學(xué)生很清楚地看到“新”定義、“新”術(shù)語、“新”算法被設(shè)計出來的緣由,理解和接受這些知識就變得輕松起來。

2 實踐考核改革

2.1 建立實踐平臺

為了鼓勵學(xué)生的團隊合作精神,以團隊為基礎(chǔ)來完成項目實踐這種考核方式被越來越多地采用,但這也會帶來一些負面影響,比如一些同學(xué)“搭便車”,而另外一些同學(xué)的負擔又過重。為了評分的公平,一般情況下,老師都會要求同學(xué)們提供工作量比例以作為評分的依據(jù),但是鑒于人為因素,這個比例往往不能真實地反映出每個人的貢獻,這一直都是造成團隊考核不公平的原因。為了避免此問題,本教學(xué)團隊提倡采用一些新工具和平臺來進行項目管理,以使團隊考核更加有據(jù)可依和科學(xué)合理,如可以利用GitHub平臺(http://www.github.com/ )來進行項目的管理,同學(xué)們在代碼方面的貢獻直接根據(jù)GitHub平臺的數(shù)據(jù)來評定。比如,圖4是一個4人小組在GitHub上管理的項目在課程授課幾個月期間貢獻數(shù)據(jù)的圖形化表示,每個人的貢獻量一目了然,再乘以工作內(nèi)容的難度系數(shù),就能夠得到客觀公正的成績評定系數(shù)。

同樣,也可以利用GitHub平臺來構(gòu)建課程實踐平臺,通過該平臺發(fā)布項目實踐要求,也鼓勵同學(xué)們通過此平臺共享課程資料和分享學(xué)習經(jīng)驗,同學(xué)們的貢獻及活躍程度的數(shù)據(jù)也能夠輕松通過GitHub平臺獲得。此外,QQ群、微信群等也是良好的溝通平臺,能夠有效促進師生之間、同學(xué)們之間的溝通和互助。

2.2 重新定位考核內(nèi)容

目前各大高校對編譯原理課程的考核一般分理論和實踐2部分,每個高校的比例都有差異。從整體數(shù)據(jù)上看,國外高校更偏重于實踐考核,如斯坦福大學(xué)編譯課程實踐部分占編譯課程總評的70%[6],卡內(nèi)基梅隆大學(xué)在編譯技術(shù)領(lǐng)域享有很高的國際聲譽,其實踐部分分數(shù)也占編譯課程總評的70%[7],加州大學(xué)伯克利分校的實踐部分占到課程總評的75%[8];而國內(nèi)高校對一般理論知識的理解和講授偏多一些,如武漢大學(xué)編譯原理課程的實踐環(huán)節(jié)占總課時的40%,北京航空航天大學(xué)編譯原理的實踐教學(xué)比理論基礎(chǔ)教學(xué)少1個學(xué)分。

近些年,國內(nèi)高校也越來越重視實踐考核,也有一些這方面的教改內(nèi)容探索[9-12]。不管國內(nèi)還是國外,多數(shù)實踐考核都是鼓勵學(xué)生使用一門自己熟悉的高級語言從頭編寫一個編譯器,這樣不僅考察了學(xué)生對課程理論知識的掌握,也連帶考核了學(xué)生對數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計算機組成原理、程序設(shè)計語言、軟件工程等多門課程的掌握程度,所以編譯原理實踐也是對學(xué)生計算機綜合能力的全面考核。因此,該課程實踐考核對學(xué)生的計算機軟件開發(fā)能力的要求就很高,并且這和軟件學(xué)院的另外一門課程“軟件綜合項目實踐”沖突,軟件綜合項目實踐課程設(shè)計的目的就是為了鍛煉和考核學(xué)生綜合運用計算機技術(shù)開發(fā)具有一定規(guī)模的系統(tǒng)軟件或應(yīng)用軟件的能力。從另一個角度來看,如果學(xué)生的計算機軟件開發(fā)素養(yǎng)不夠好,即使在該課程的學(xué)習過程中非常努力,也無法取得理想的成績。這對“下游成績”的學(xué)生來說也不是很公正。

所以鼓勵學(xué)生使用編譯開源工具,“站在巨人的肩膀上”,借助開源工具的幫助來構(gòu)建編譯器,推薦的詞法分析器包括Lex等,語法分析器包括JavaCC、Bison和Yacc等,這些開源工具被廣泛應(yīng)用,Lex、Yacc等也有多個不同語言的實現(xiàn)版本(包括C、Python等);同時支持跨平臺(包括Windows、Linux、Mac等),學(xué)生根據(jù)自己熟悉的平臺和語言進行選擇。如此,課程實踐考核對軟件開發(fā)技能的要求相對降低一些,考核點集中在學(xué)生對編譯技術(shù)及方法的理解和掌握上,而不是在學(xué)生軟件開發(fā)綜合素養(yǎng)上。這樣設(shè)計的“實踐”環(huán)節(jié)依然可以促進和加強對理論知識的理解,而且更有針對性。

為了能夠識別并鼓勵優(yōu)秀的學(xué)生,可以把實踐考核設(shè)計成“多層次”的考核??梢蕴峁┮粋€簡單語言L0,一個相對豐富的語言L1,基于L1擴展語言Ln(不限制擴展的語法),對于實現(xiàn)不同級別語言編譯器的同學(xué),差異化他們的實踐環(huán)節(jié)得分。比如,可以在課程設(shè)計中列出2個可選的題目編寫PL/0編譯器和編寫類C編譯器。學(xué)生可以根據(jù)自己的能力和興趣實現(xiàn)一個適合于自己水平的編譯器。

3 結(jié) 語

基于多年的教學(xué)經(jīng)驗,我們提出編譯原理課程理論教學(xué)的一些有效的教學(xué)方法,同時對實踐考核進行思考和改革,課程教學(xué)實踐表明,這些教學(xué)方法和實踐改革卓有成效,希望為高校的編譯原理課程的教學(xué)提供一些借鑒。下一步希望能夠在實踐環(huán)節(jié)的過程監(jiān)控上更加細致和科學(xué),也計劃將課程的一些擴展性知識以慕課教學(xué)的方式開展,以期為課堂教學(xué)帶來有益的補充。

作者簡介:高珍,女,副教授,研究方向為編譯技術(shù)、數(shù)據(jù)分析與數(shù)據(jù)挖掘, gaozhen@#edu.cn;

衛(wèi)志華(通信作者),女,副教授,研究方向為機器學(xué)習、數(shù)據(jù)挖掘,zhihua-wei@#edu.cn。

參考文獻:

[1]周會平, 王挺, 李夢君. 關(guān)于編譯原理課程定位的思考[J]. 計算機教育, 2011(11): 45-47.

[2]周汝雁, 韓彥嶺, 張明華,等. 基于教育心理學(xué)的編譯原理課程教學(xué)方法[J]. 計算機教育, 2014(9): 66-68.

[3]楊曉波, 駱嘉偉, 文佳寶. 目標驅(qū)動的編譯原理課程體系研究[J]. 計算機教育, 2011(11): 23-27.

[4]黃孝喜, 諶志群, 王榮波. 隱喻語言在編譯原理課程教學(xué)中的應(yīng)用[J]. 計算機教育, 2015(1): 102-104.

[5]姚衛(wèi)紅, 趙晶. “編譯原理”教學(xué)實踐探究[J]. 計算機教育, 2013(5): 64-67.

[6]斯坦福大學(xué)編譯課程網(wǎng)站 [EB/OL]. [2016-09-01]. http://online.stanford.edu/course/compilers.

[7]卡內(nèi)基梅隆大學(xué)編譯課程網(wǎng)站[EB/OL]. [2016-09-01]. http://www.cs.cmu.edu/~fp/courses/15411-f08/.

[8]加州大學(xué)伯克利分校編譯課程網(wǎng)站[EB/OL]. [2016-09-01]. http://www.eecs.berkeley.edu/Courses/Data/208.html.

[9]竇亮, 楊宗源, 王婷婷. 編譯實驗課程的教學(xué)研究與實踐[J]. 計算機教育, 2009(23): 8-11.

[10]邵兵. 軟件學(xué)院編譯原理實踐課程的教學(xué)探索[J]. 計算機教育, 2016(8):115-117.

[11]張昱, 陳意云. 編譯原理課程實踐改革探索[J]. 計算機教育, 2008(8): 24-26.

[12]張晶, 金英, 劉磊.“編譯原理”實踐課程教學(xué)方法研究[J]. 吉林大學(xué)學(xué)報(信息科學(xué)版), 2009(21): 19-21.

(見習編輯:張 勛 )

猜你喜歡
教學(xué)實踐自主學(xué)習
基于三維軟件和云班課APP的機械設(shè)計課程教學(xué)實踐
中職職業(yè)生涯規(guī)劃課程的教學(xué)反思
中職計算機應(yīng)用課程教學(xué)改革與反思
淺論高中化學(xué)生活化教學(xué)的實踐與思考
淺談初中物理實驗教學(xué)與學(xué)生創(chuàng)新能力的培養(yǎng)
測量平差課程教學(xué)改革探討與實踐
高中生英語自主學(xué)習能力培養(yǎng)研究
翻轉(zhuǎn)模式在“液壓與氣動”教學(xué)中的應(yīng)用研究
中職學(xué)校“生本課堂”的調(diào)查研究與實踐
踐行少教多學(xué),構(gòu)建高效課堂
个旧市| 台南市| 敦化市| 尉犁县| 武义县| 克什克腾旗| 昔阳县| 正安县| 寻乌县| 洛浦县| 阳东县| 崇义县| 林周县| 望江县| 河北省| 锦州市| 田东县| 庄浪县| 永清县| 武川县| 桦南县| 乌兰浩特市| 兴山县| 江油市| 德保县| 东乡县| 石楼县| 杂多县| 海丰县| 高淳县| 米易县| 鄄城县| 泰兴市| 阿克苏市| 宝兴县| 和平区| 休宁县| 竹山县| 云浮市| 红河县| 镇巴县|