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

?

“編譯原理”課程教學(xué)改革探討

2021-04-11 08:14:44希,陳佳,農(nóng)
梧州學(xué)院學(xué)報 2021年6期
關(guān)鍵詞:編譯原理編譯器原理

何 希,陳 佳,農(nóng) 健

(梧州學(xué)院 大數(shù)據(jù)與軟件工程學(xué)院,廣西 梧州 543002)

“編譯原理”課程是一門介紹編譯器工作原理和方法的課程。它是高等學(xué)校培養(yǎng)計算機(jī)專業(yè)人才的主干課程之一,也是一門對理論、實踐要求都很高的課程。它既要求學(xué)生理解編譯原理、編譯系統(tǒng)結(jié)構(gòu)、各種編譯算法,又需要學(xué)生具備設(shè)計、完成、分析和維護(hù)編譯程序的初步能力。同時,“編譯原理”課程又是計算機(jī)專業(yè)中一門綜合性很強的專業(yè)課程,需要以多門前修課程為基礎(chǔ),如“數(shù)據(jù)結(jié)構(gòu)”“離散數(shù)學(xué)”“操作系統(tǒng)”“程序設(shè)計”“匯編語言”等等。

據(jù)筆者了解,目前大多數(shù)“編譯原理”課程的內(nèi)容包括詞法分析(正則表達(dá)式、非確定有限自動機(jī)、確定有限自動機(jī))、語法分析(上下文無關(guān)文法、自上而下語法分析、自下而上語法分析)、語義分析和中間代碼生成(屬性文法、語法制導(dǎo)翻譯形成中間代碼)、代碼優(yōu)化(局部優(yōu)化、循環(huán)優(yōu)化)和目標(biāo)代碼生成。同時,一些“編譯原理”課程還會針對某些課程內(nèi)容進(jìn)行一些小型項目實踐和練習(xí)。

1 “編譯原理”課程的教學(xué)現(xiàn)狀

由于編譯系統(tǒng)復(fù)雜,所涉及的理論寬廣且深奧,而且課程涉及多門前修課程,大多數(shù)學(xué)生反映此課程內(nèi)容枯燥、抽象、復(fù)雜。同時,由于課程講授難度大,學(xué)生積極性不高,參與度低,很多教師也不愿意開設(shè)“編譯原理”課程。有的高校為此縮減了“編譯原理”課程的課時個別高校甚至把此課程從人才培養(yǎng)計劃中刪除。筆者分析有以下原因造成了“編譯原理”課程目前的困境:(1)課程內(nèi)容的設(shè)置偏理論輕實踐。編譯系統(tǒng)中有大量的理論內(nèi)容,這些內(nèi)容對于本科學(xué)生來說比較抽象甚至是晦澀難懂,而且在實際中應(yīng)用不多。很多教師不得不把大部分時間用來解釋這些理論內(nèi)容,從而留給學(xué)生實踐的時間不多,進(jìn)而增加了學(xué)生理解理論知識的難度。(2)學(xué)生基礎(chǔ)參差不齊。部分學(xué)生在修該課程前并沒有打好基礎(chǔ),造成了理解上的障礙。(3)教師自身功底薄弱。(4)實踐環(huán)節(jié)的開創(chuàng)性和實用性不夠。由于時間的關(guān)系,學(xué)生很難實現(xiàn)一個完整的編譯器。即使是簡化版的計算機(jī)語言,其編譯器的開發(fā)難度也是遠(yuǎn)遠(yuǎn)超出“編譯原理”課程項目的范疇。然而,如果學(xué)生沒有一個從無到有設(shè)計和完成一個編譯器的經(jīng)歷,那么他們對編譯原理的理解、對編譯中涉及算法的理解都會大打折扣。

2 相關(guān)工作

針對“編譯原理”課程存在的問題,許多研究提出了不同的解決方案。文獻(xiàn)[1]提出課內(nèi)因材施教、理論聯(lián)系實際。讓學(xué)生上講臺授課。課外組織答疑,采用加分規(guī)則提拔優(yōu)秀學(xué)生。文獻(xiàn)[2]提出有效教學(xué),豐富教學(xué)手段,加強實踐教學(xué)。文獻(xiàn)[3]提出引用4個實驗項目來幫助學(xué)生掌握理論知識。文獻(xiàn)[4]提出理論與實踐并重,并且選擇C語言的編譯程序作為實驗內(nèi)容。同時,選擇得當(dāng)教學(xué)方法。文獻(xiàn)[5]提出理論課教學(xué)應(yīng)該體系完整、結(jié)構(gòu)清晰、內(nèi)容貫通,同時倡導(dǎo)采用CAI軟件進(jìn)行教學(xué)。文獻(xiàn)[6]建議課程教師對教材及教學(xué)內(nèi)容做一定程度的處理,對層次較低的學(xué)生則可適當(dāng)降低難度,對層次較高的學(xué)生可加入與編譯有關(guān)的最新內(nèi)容,激發(fā)學(xué)生對編譯的興趣。

3 教學(xué)改革方案

3.1 基本思路

筆者的基本思路是通過一個小型的、完整的編譯器項目來引導(dǎo)整個“編譯原理”課程。課程的考察方式摒棄了傳統(tǒng)的期末閉卷考試,避免學(xué)生死記硬背編譯理論和算法。課程根據(jù)每個學(xué)生團(tuán)隊所承擔(dān)編譯器項目的完成度來進(jìn)行評估,讓每個學(xué)生都有參與感,發(fā)揮主觀能動性來學(xué)習(xí)編譯器相關(guān)知識。一個具體的編譯器項目可以讓學(xué)生理解編譯問題是在什么背景下產(chǎn)生的,編譯理論是基于哪些假設(shè)而產(chǎn)生的,而編譯算法又是如何解決這些問題的,有哪些優(yōu)點,有哪些妥協(xié)。項目中的代碼更是可以讓學(xué)生更好地理解編譯器結(jié)構(gòu)以及各種編譯算法的實現(xiàn)。課程的編譯器項目可以細(xì)分為詞法分析模塊、語法分析模塊、語義分析模塊、執(zhí)行模塊。各個模塊分階段提交、評估。編譯理論、編譯相關(guān)算法的講授以服務(wù)編譯器項目為出發(fā)點,對現(xiàn)有內(nèi)容進(jìn)行斟酌、調(diào)整。 對于絕大多數(shù)學(xué)生而言,將來都不一定進(jìn)行編譯器方向深入的研究。對于他們而言,理解編譯器的基本原理、工程上設(shè)計和實現(xiàn)顯然更加重要和實用。

3.2 “編譯原理”課程項目的選擇

在筆者的教改方案中,選擇合適的“編譯原理”課程項目是決定整個課程成敗的關(guān)鍵。首先,這個課程項目一定要相對完整,包含編譯系統(tǒng)的主要模塊。這樣學(xué)生才可以對整個編譯系統(tǒng)有完整的理解。其次,這個課程項目的工作量是在學(xué)生能力范圍之內(nèi)的,可以由學(xué)生團(tuán)隊在一個學(xué)期內(nèi)完成。一般常見計算機(jī)語言的編譯器,如Java編譯器, C編譯器, 其代碼量都是驚人的,哪怕是精簡版的編程語言,如miniJava, 其編譯器的實現(xiàn)也會因為工作量太大而不適合作為本科生“編譯原理”課程項目。筆者在讀研期間,曾經(jīng)為Datalog語言[7]編寫過編譯器。Datalog語言是一種接近SQL的數(shù)據(jù)庫查詢語言,其精簡語法如下:

(1)ddb ∷= idb_rules DOLLAR

(2)idb_rules ∷= idb_rule|idb_rule idb_rules

(3)idb_rule ∷= NAME LPAREN arg_list RPAREN IMPLIES idb_body PERIOD

(4)idb_body ∷= literal|literal COMMA idb_body

(5)literal ∷= NOTOP predicate|predicate

(6)predicate ∷= NAME LPAREN arg_list RPAREN|arg COMPARISON arg

(7)arg_list ∷= arg|arg COMMA arg_list

(8)arg ∷= NUMBER|STRING|VARIABLE

從上面Datalog語言的語法可以看到,Datalog語言中單詞種類少,其編譯器中的詞法分析模塊相對簡單,只有8條語法規(guī)則,決定了其編譯器中的語法分析模塊不會太復(fù)雜。因此,Datalog語言編譯器項目是一個工作量適中,非常適合作為“編譯原理”課程的項目。實際上,在實驗環(huán)節(jié)中,該課程教師向?qū)W生介紹2款工具JFlex[8]和CUP[9],學(xué)生可以通過這2款工具配置、定制產(chǎn)生詞法分析模塊和語法分析模塊,大大減少了編碼工作量,而且可以更加專注地理解編譯器的工作原理。同時,還為編譯器中每個模塊以及一些重要的功能點提供了測試案例,幫助學(xué)生在分模塊開發(fā)過程中進(jìn)行單元測試,減輕學(xué)生的工作量。

Datalog語言編譯器中的語義分析模塊需要一些Datalog語言的使用經(jīng)驗,鑒于大多數(shù)學(xué)生在數(shù)據(jù)庫原理課程中都學(xué)習(xí)過與Datalog語言類似的SQL語言,在筆者適當(dāng)?shù)奶崾竞蛶椭?,學(xué)生可以在短期內(nèi)熟悉理解Datalog語言。最后,課程教師會提供基礎(chǔ)的基于Datalog語言的數(shù)據(jù)庫及管理程序,以便于學(xué)生在完成整個Datalog語言編譯器后可以使用Datalog語言執(zhí)行數(shù)據(jù)庫查詢以測試編譯器的正確性。

筆者在具體的課程實踐中發(fā)現(xiàn),通過組建團(tuán)隊的形式,大多數(shù)學(xué)生是可以在一個學(xué)期的“編譯原理”課程中完成此編譯器項目的。

3.3 教學(xué)大綱和教案的制定

在筆者的教改方案中,“編譯原理”課程的講授思路已經(jīng)從原來的重理論輕實踐轉(zhuǎn)變?yōu)橐皂椖繛楹诵?,理論與實踐并重。課程的考核方式也由期末閉卷考試轉(zhuǎn)變?yōu)榛诰幾g器項目的分階段考核。針對實踐性強的內(nèi)容,如DFA化簡,自上而下語法分析,還會采用課堂小測驗的方式進(jìn)行考查。

筆者對課程內(nèi)容進(jìn)行了優(yōu)化?;舅悸肪褪菑膫鹘y(tǒng)的面面俱到、相關(guān)理論和算法都涉及,到現(xiàn)在的以應(yīng)用為導(dǎo)向,重點突破。(1)將與編譯器項目相關(guān)的編譯理論和算法作為重點講授對象。以語法分析為例,相關(guān)的算法很多,如果在課程中全部覆蓋,哪怕是部分覆蓋,都會占用很多時間,而且學(xué)生如果沒有在實際中應(yīng)用到這些算法,他們也很難理解和記住。所以課程教師會挑選在項目中實際應(yīng)用到的自上而下語法分析算法重點講述。(2)將理論證明作為可選內(nèi)容,讓學(xué)有余力的學(xué)生按需學(xué)習(xí),課程教師提供必要的幫助。對學(xué)習(xí)課程吃力的學(xué)生不做要求。(3)將一部分高級的內(nèi)容從課程內(nèi)容中移出,放在針對研究生的“編譯原理”課程中。例如,寄存器分配,涉及一些高階知識,并不適合給本科生講授。(4)適當(dāng)補充一些涉及到的知識點。例如,形式語言,與課程相關(guān)度高,需要在課程中安排時間給學(xué)生補充或復(fù)習(xí)。

該課程對教材的選用也非常重視。很多“編譯原理”課程采用的Alfred V. Aho編著的《編譯原理技術(shù)和工具》。此書被認(rèn)為是編譯領(lǐng)域的經(jīng)典教材,將編譯原理寫得非常深入。然而,筆者認(rèn)為此書并不一定適合作為普通計算機(jī)本科學(xué)生的“編譯原理”課程,因為本科階段的“編譯原理”課程沒有必要涉及很深奧的理論。相比之下,Andrew W. Appel編著的《現(xiàn)代編譯原理-C語言描述》更適合課程的需要。同時,在互聯(lián)網(wǎng)時代,筆者希望可以充分利用網(wǎng)絡(luò)中的各種電子資料和視頻資料,特別是名校的公開課視頻,其往往比傳統(tǒng)的紙質(zhì)教材更容易讓學(xué)生接受。

3.4 教學(xué)方法的改進(jìn)

為了進(jìn)一步提高教育質(zhì)量,筆者在“編譯原理”課程的教學(xué)中采用了一些新的方法:

(1)建設(shè)“編譯原理”課程網(wǎng)站。網(wǎng)站集合了課程相關(guān)的幻燈片、習(xí)題、參考資料、課程項目。讓學(xué)生隨時可以獲取課程相關(guān)信息。

(2)課后設(shè)置專門的答疑時間。

(3)反轉(zhuǎn)課堂。鼓勵學(xué)生上講臺講解編譯知識,課程教師點評。

(4)鼓勵學(xué)有余力的學(xué)生參與編譯方面的研究項目。

(5)采用CAI教學(xué),加深學(xué)生對編譯原理概念的理解。

(6)以學(xué)生團(tuán)隊為單位,研究相關(guān)的論文并報告。

3.5 實施與效果

筆者在本科生的“編譯原理”課程中嘗試了本文討論的教學(xué)改革方案,其教學(xué)安排見表1。

表1 編譯原理課程教學(xué)安排

得到以下總結(jié)和反饋:

(1)學(xué)生上課積極性普遍提高,踴躍參與課堂討論。

(2)學(xué)生對課程項目非常感興趣,自發(fā)討論不同的解決方案。

(3)課程項目對學(xué)生的編程要求較高,有一部分編程基礎(chǔ)差的學(xué)生對于課程項目實施比較吃力,因而也影響了他們理解課程。

(4)每隔2周1次的課堂小測驗對于督促學(xué)生學(xué)習(xí)非常有好處。

(5)由于既要備課、上課,也要負(fù)責(zé)在課后給學(xué)生答疑以及批改作業(yè),課程教師的工作壓力較大,建議給“編譯原理”這門課配備2個學(xué)生助教。

4 結(jié)語

“編譯原理”課程是計算機(jī)專業(yè)的核心課程,是所有計算機(jī)學(xué)生都應(yīng)該認(rèn)真掌握的課程。針對目前此課程所面臨的困境,我們提出了以一個小型編譯器項目為核心、理論與實踐并重的“編譯原理”課程改革方案。將編譯原理和工程實踐相結(jié)合,旨在提高學(xué)生的積極性和參與度,提高整個“編譯原理”課程的教學(xué)質(zhì)量。

目前,梧州學(xué)院大數(shù)據(jù)與軟件學(xué)院有一個招收外國留學(xué)生的計算機(jī)科學(xué)與技術(shù)專業(yè),筆者正在籌劃將教學(xué)改革后的“編譯原理”課程加入其專業(yè)選修課中,將教改成果向他們推廣。

猜你喜歡
編譯原理編譯器原理
了解咳嗽祛痰原理,有效維護(hù)健康
基于相異編譯器的安全計算機(jī)平臺交叉編譯環(huán)境設(shè)計
平均場正倒向隨機(jī)控制系統(tǒng)的最大值原理
化學(xué)反應(yīng)原理全解讀
軟件學(xué)院編譯原理實踐課程的教學(xué)探索
基于MOOC的編譯原理分階段課程教學(xué)研究
營造興趣啟蒙式學(xué)習(xí)氛圍的編譯原理首課設(shè)計
通信原理教學(xué)改革探索
“編譯原理”課程教學(xué)改革初探
通用NC代碼編譯器的設(shè)計與實現(xiàn)
廊坊市| 镇雄县| 金坛市| 资溪县| 南通市| 宁河县| 通海县| 宣恩县| 黔东| 仲巴县| 台前县| 玛纳斯县| 文成县| 广饶县| 南丹县| 华亭县| 东乌珠穆沁旗| 赣榆县| 大余县| 甘孜县| 丰宁| 彭水| 大悟县| 山阴县| 南皮县| 广河县| 华蓥市| 高邮市| 冕宁县| 东乌珠穆沁旗| 曲周县| 绥宁县| 岚皋县| 浦城县| 江达县| 延吉市| 栾城县| 鹤峰县| 益阳市| 黄冈市| 灵宝市|