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

?

實驗案例驅(qū)動的編譯原理教學(xué)改革探討

2017-08-07 11:32弦,朱強(qiáng),
合肥師范學(xué)院學(xué)報 2017年3期
關(guān)鍵詞:詞法文法原理

祖 弦,朱 強(qiáng), 謝 飛

(合肥師范學(xué)院 計算機(jī)學(xué)院,安徽 合肥 230601)

?

實驗案例驅(qū)動的編譯原理教學(xué)改革探討

祖 弦,朱 強(qiáng), 謝 飛

(合肥師范學(xué)院 計算機(jī)學(xué)院,安徽 合肥 230601)

在高校計算機(jī)相關(guān)專業(yè)的課程中,編譯原理是教學(xué)難度較大的一門重要專業(yè)課程。為提高本課程的教學(xué)質(zhì)量,本文結(jié)合自身教學(xué)實踐,分析編譯原理課程教學(xué)中存在的諸多現(xiàn)狀及問題,針對核心知識點,設(shè)計實驗教學(xué)案例,探討在實驗案例驅(qū)動下的編譯原理課程教學(xué)改革方案。

編譯原理;實驗案例;教學(xué)改革

編譯原理課程是計算機(jī)及相關(guān)專業(yè)的一門重要專業(yè)課程,通過本課程學(xué)習(xí),使學(xué)生掌握一般編譯系統(tǒng)的結(jié)構(gòu)、工作流程及編譯程序各組成部分的設(shè)計原理和實現(xiàn)技術(shù),培養(yǎng)學(xué)生的計算思維能力,有助于提高實踐動手能力和綜合運用專業(yè)知識的能力[1]。

編譯原理課程被認(rèn)為是計算機(jī)專業(yè)學(xué)生最難學(xué)的課程之一,主要原因有以下幾個方面:

(1)理論性太強(qiáng),知識點過于抽象,課程中大部分概念和算法描述是以形式化語言為主,比如上下文無關(guān)文法、有限自動機(jī)、屬性文法,導(dǎo)致學(xué)生較難理解算法背后所描述的編譯技術(shù)精髓。

(2)教學(xué)方式單一。由于理論知識過多,為保證教學(xué)進(jìn)度,完成教學(xué)的全部內(nèi)容,因此在教學(xué)方法上大都以教師在課堂的灌輸式為主,課堂上偏重對編譯系統(tǒng)的原理、結(jié)構(gòu)及技術(shù)的理論剖析,弱化了對具體編譯系統(tǒng)實例的講解。

(3)實踐環(huán)節(jié)薄弱。目前,大部分高校在編譯原理實驗教學(xué)方面,要求學(xué)生實現(xiàn)一個小型語言的編譯系統(tǒng),這對于大部分學(xué)生來說存在較大難度,因此,很多學(xué)生最后都沒有較好地完成實驗任務(wù)。

因此,如何提高教學(xué)質(zhì)量,提高學(xué)生學(xué)習(xí)興趣,成為目前編譯教學(xué)中亟待解決的問題。本文結(jié)合作者從事編譯原理課程教學(xué)的實踐和反思,以實驗案例教學(xué)作為切入點,深入探討本課程的教學(xué)改革方案。

1 國內(nèi)外研究現(xiàn)狀

國外大學(xué)從二十世紀(jì)六十年代開始就設(shè)置編譯原理課程,比較經(jīng)典的教材有Alfred V. Aho 等人編寫的《Compilers: principles, techniques, and tools》(中文名:編譯原理技術(shù)與工具)、Andrew W. Appel編寫的《Modern Compiler Implementation in C》(中文名:現(xiàn)代編譯原理——C語言描述)和Steven S.Muchnick編寫的《Advanced Compiler Design and Implementation》(中文名:高級編譯器設(shè)計與實現(xiàn)),這三本書在編譯原理領(lǐng)域分別被稱為“龍書”、“虎書”和“鯨書”?!褒垥弊钤缡窃?986年出版的,第二版中刪除了語法分析中的算法優(yōu)先分析法、語法制導(dǎo)翻譯中的遞歸計算方法等過時技術(shù),增加了面向?qū)ο缶幾g、類型檢查等新技術(shù)?!盎卑珻語言版本、Java語言版本和ML語言版,在“龍書”知識點基礎(chǔ)上,增加了數(shù)據(jù)流分析、循環(huán)優(yōu)化和內(nèi)存管理等內(nèi)容?!蚌L書”重點介紹對編譯器后端優(yōu)化的處理,因此更適合作為研究生的教材或參考書。

圖1 編譯原理實驗案例設(shè)計

近年來,國內(nèi)高校在編譯原理課程教學(xué)方面積累了豐富的經(jīng)驗,建設(shè)了國家精品課程和教學(xué)資源庫,如武漢大學(xué)何炎祥教授、北京工業(yè)大學(xué)蔣宗禮教授、國防科學(xué)技術(shù)大學(xué)王挺教授、北京航天航空大學(xué)張莉教授等帶領(lǐng)的教學(xué)團(tuán)隊。中國科學(xué)技術(shù)大學(xué)張昱等針對國內(nèi)普通高校本科、重點高校本科和研究生階段三個層次,提出不同的教學(xué)目標(biāo),并給出三個層次的教學(xué)內(nèi)容和建議[5]。北京理工大學(xué)李侃等提出知識、能力、素質(zhì)三維一體的編譯原理課程改革,明確編譯原理課程建設(shè)目標(biāo)是培養(yǎng)學(xué)生對系統(tǒng)軟件和大中型軟件的規(guī)劃、組織、設(shè)計和實現(xiàn)的綜合能力和素質(zhì),理論教學(xué)采用“發(fā)現(xiàn)式教學(xué)+案例教學(xué)”方式,重在提高學(xué)生認(rèn)知能力、創(chuàng)新能力和科研能力;實驗教學(xué)分為4個層次,即認(rèn)知實驗、課程實驗、綜合性設(shè)計實驗和應(yīng)用提高實驗[6]。武漢大學(xué)楊劍鋒等對多核技術(shù)課程中編譯原理知識點進(jìn)行了分析,將多核編譯和多核理論對應(yīng)起來,介紹以多核處理器為基本硬件平臺的編譯方法和優(yōu)化工具[7]。李志敏等借鑒CDIO工程教育理念,提出基于先修課程實踐項目的教學(xué)方案,對編譯程序各階段找出先修課程實踐項目,從而使大多數(shù)學(xué)生都能順利地完成詞法分析、語法分析等實驗任務(wù)[8]。

2 編譯原理實驗案例設(shè)計

實驗案例教學(xué)是培養(yǎng)學(xué)生知識應(yīng)用能力的直接手段之一,增加實驗教學(xué)案例,通過對案例的講解和演示,加強(qiáng)學(xué)生對抽象理論的認(rèn)知與理解。

一個完整的編譯程序大致可以按照五個階段的任務(wù)分模塊進(jìn)行設(shè)計:詞法分析器、語法分析器、語義分析與中間代碼產(chǎn)生器、優(yōu)化器、目標(biāo)代碼生成器。針對這五個模塊教學(xué)中抽象但較為重要的具體算法及理論知識,增加實驗案例教學(xué),讓學(xué)生用編程實現(xiàn)核心算法。詳細(xì)實驗案例設(shè)計思路如圖1所示。

2.1 詞法分析實驗案例設(shè)計

詞法分析階段的任務(wù)是通過掃描源程序,識別出一個個單詞符號。首先為了讓學(xué)生從整體上先掌握詞法分析器的設(shè)計技術(shù)及工作流程,設(shè)計了實驗案例1,引入一個詞法分析器的自動生成工具LEX;其次詞法分析階段的重點內(nèi)容為狀態(tài)轉(zhuǎn)換圖和有限自動機(jī),為深入理解其中核心算法,設(shè)計了實驗案例2。

實驗案例1:利用LEX工具自動生成詞法分析程序

實驗1要求給出C語言或者JAVA語言的詞法,使用LEX自動生成工具實現(xiàn)詞法分析程序。實驗過程中,首先編寫一個描述詞法分析器的LEX程序,依據(jù)所給語言的詞法規(guī)則,對輸入程序進(jìn)行詞法分析,識別出關(guān)鍵字、標(biāo)識符、常量、運算符、分隔符這五種類別的單詞,并以二元式(單詞種別,單詞符號的屬性值)的形式表示并輸出。通過本實驗使學(xué)生加深對詞法分析程序的功能及實現(xiàn)方法的理解。

實驗案例2:手工構(gòu)造詞法分析程序

實驗2要求不采用任何詞法分析自動生成工具,手工編程實現(xiàn)詞法分析器。實驗過程中,根據(jù)給出C語言的詞法規(guī)則,設(shè)計描述該規(guī)則中各類單詞的狀態(tài)轉(zhuǎn)換圖,轉(zhuǎn)化為確定的有限自動機(jī)(DFA),分析DFA中識別各類單詞的處理動作,得出詞法分析程序的算法設(shè)計思想,并編程實現(xiàn)。通過設(shè)計開發(fā)一個符合上述要求的C語言詞法分析程序,加深學(xué)生對狀態(tài)轉(zhuǎn)換圖、有限自動機(jī)的理解。

2.2 語法分析實驗案例設(shè)計

語法分析技術(shù)是編譯原理里面最成熟的技術(shù)之一,一般將語法分析器分為兩類,一類是自上而下分析法,另一類是自下而上分析法。在自上而下分析中,較為抽象的知識點為First集和Follow集、LL(1)文法、預(yù)測分析程序。在自下而上分析中,難度較大的知識點為LR(0)文法、SLR(1)文法。針對以上語法分析的知識點,設(shè)計了實驗案例3、4,另外為了鞏固學(xué)生對語法分析器工作原理的掌握程度,設(shè)計了實驗案例5,引入一個語法分析器的自動生成工具YACC。

實驗案例3:LL(1)語法分析程序

實驗3要求學(xué)生根據(jù)給定的文法,編寫LL(1)語法分析程序,并判斷輸入的字符串是否符合該文法。詳細(xì)實驗過程是給定具體文法,對于輸入的字符串,構(gòu)造FIRST集和FOLLOW集,判斷是否符合LL(1)文法,若符合,則構(gòu)造LL(1)分析表,從而判斷出該字符串是否為符合給定文法的句型。通過本實驗使學(xué)生熟悉LL(1)文法,掌握預(yù)測分析表的構(gòu)造過程。

實驗案例4:LR(0)語法分析程序

實驗4要求根據(jù)給定的文法,編寫LR(0)語法分析程序,要求判斷輸入的字符串是否符合該文法。實驗過程中,給定具體文法,構(gòu)造一個能識別所有活前綴的有限自動機(jī),生成LR分析表,利用LR分析表對輸入的字符串進(jìn)行分析,并輸出詳細(xì)的預(yù)測分析過程。通過本實驗使學(xué)生掌握采用LR(0)語法分析方法。

實驗案例5:利用YACC工具自動生成語法分析程序

實驗5要求學(xué)生能夠根據(jù)語言給出語法規(guī)則的定義,生成語言的解析器。實驗過程中,使用YACC工具實現(xiàn)一個高級計算器程序,該程序能夠進(jìn)行加、減、乘、除、冪運算,并需注意優(yōu)先級,實驗過程中如需用到詞法分析結(jié)果,可調(diào)用LEX自動生成工具。實驗5使學(xué)生加深對語法分析程序的功能及實現(xiàn)方法的理解。

2.3 語義分析與中間代碼產(chǎn)生實驗案例設(shè)計

中間語言是與機(jī)器無關(guān)、便于處理的記號系統(tǒng),常見的中間代碼形式有:后綴式、三地址代碼、DAG圖表示、抽象語法樹。本節(jié)實驗案例選取后綴式表示中間代碼,后綴式也叫做逆波蘭式,這種表示法是將操作數(shù)寫在前面,把運算符寫在后面。

實驗案例6:中綴式轉(zhuǎn)化成后綴式

實驗6要求將一個用中綴式表示的算術(shù)表達(dá)式轉(zhuǎn)換為后綴式表示。實驗過程中,構(gòu)造一個用于存放運算符的棧,越往棧頂?shù)倪\算符優(yōu)先級越高,讀入一個用中綴式表示的算術(shù)表達(dá)式,并加以“#”作為結(jié)束符號,從左至右進(jìn)行掃描,從第一個字符開始判斷,若該字符是數(shù)字,則一直分析到該數(shù)字串的結(jié)束,將該數(shù)字串直接輸出,若該字符是運算符,則將該字符與棧頂運算符進(jìn)行優(yōu)先級比較,如果該字符優(yōu)先級高,則入棧,否則將棧頂?shù)倪\算符出棧后,再將該字符入棧。重復(fù)上述步驟,直至掃描結(jié)束,即可將中綴式轉(zhuǎn)化為后綴式。通過本實驗使學(xué)生掌握后綴式的表示方法,加深對中間語言的功能及實現(xiàn)方法的理解。

2.4 實驗案例具體實施過程

在實驗案例教學(xué)環(huán)節(jié)的具體實施過程中,由于開設(shè)編譯原理課程時,學(xué)生已經(jīng)學(xué)習(xí)完軟件工程這門課,具備一定項目開發(fā)的基礎(chǔ),因此在學(xué)期開始時就將學(xué)生分組為軟件項目開發(fā)小組,2-3人一組,在學(xué)習(xí)各知識模塊時,每組將分配相應(yīng)的實驗案例題目,按照工程化的思想進(jìn)行項目分工,實驗案例教學(xué)與課堂知識講授同步進(jìn)行,并以階段性小組開發(fā)的形式,每一階段題目的選擇分別對應(yīng)課堂教學(xué)的各知識點,并由相應(yīng)的階段負(fù)責(zé)人進(jìn)行答辯,比如教師講解完詞法分析器這一章節(jié),則要求項目小組完成詞法分析相應(yīng)實驗案例的設(shè)計開發(fā)工作,并由該階段小組開發(fā)人員參加驗收考核,采用這種方法可使小組分工明確,每位同學(xué)均能參與到課程設(shè)計中來,不僅能強(qiáng)化對該階段知識點的理解和應(yīng)用,提高對編譯技術(shù)的動手操作能力,保證課堂教學(xué)的質(zhì)量,還能鍛煉學(xué)生利用工程化思想解決實際問題的能力。

3 結(jié)束語

編譯原理是一門理論性較強(qiáng)的計算機(jī)專業(yè)必修課程,本文秉承以學(xué)生為中心的教育思想理念,分析目前課程教學(xué)現(xiàn)狀,提出了以實驗案例驅(qū)動的編譯原理教學(xué)改革方案,通過加大學(xué)生對課程實驗案例的參與力度,有效激發(fā)了學(xué)生學(xué)習(xí)興趣,更好的理解及掌握編譯過程中較為重要的核心算法理論,以期促進(jìn)學(xué)生對編譯原理課程的學(xué)習(xí),同時也培養(yǎng)了學(xué)生利用工程思想解決問題的能力,達(dá)到提高教學(xué)質(zhì)量的目的。

[1] 徐振強(qiáng), 侯惠芳. “編譯原理”課程的研討式教學(xué)初探[J]. 計算機(jī)教育, 2010(3): 33-35.

[2] Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Compliers: principles, techniques, and tools [M]. New York: Addison Wesley, 1986.

[3] Steven S. Muchnick. Advanced Compiler Design and Implementation [M]. Morgan Kaufmann, 1997.

[4] Andrew W. Appel, Jens Palsberg. Modern Compiler Implementation in Java/C++/ML [M]. New York: Cambridge, 1997.

[5] 張昱, 陳意云, 郭宇, 李兆鵬. “編譯原理”課程的教學(xué)內(nèi)容選擇的探討[J]. 計算機(jī)教育, 2009(18): 143-146.

[6] 李侃, 陳英, 計衛(wèi)星, 王貴珍. “編譯原理與設(shè)計”課程三維一體化教學(xué)改革[J]. 計算機(jī)教育, 2011(14): 38-39,48.

[7] 楊劍鋒, 隋竹翠, 謝銀波. 多核課程中的編譯原理知識點分析[J]. 計算機(jī)教育, 2011(11): 33-36,44.

[8] 李志敏, 黃蘭英, 葉從歡, 熊曾剛. 基于先修課程實踐項目的編譯原理教學(xué)方案[J]. 計算機(jī)教育, 2015(14): 119-122.

A Discussion on Teaching Reform of Experimental Case-driven Compiler Principle

ZU Xuan, ZHU Qiang, XIE Fei

(SchoolofComputerScience,HefeiNormalUniversity,Hefei230601,China)

In the college computer related professional courses, Compiler Principle, one of important professional courses, is difficult to teach. In order to improve the teaching quality of this course, this paper analyzes the current situation and problems in the teaching of Compiler Principle, the teaching case of the core knowledge points, and explores the teaching reform program of Compiler Principle.

Compiler Principle; experimental cases; teaching reform

2016-12-30

合肥師范學(xué)院校級質(zhì)量工程項目“編譯原理課程建設(shè)”(2013hxk05)、面向卓越軟件工程師培養(yǎng)的實踐教學(xué)體系構(gòu)建(2015jyxm272)、省級卓越人才教育培養(yǎng)計劃(2014zjjh030)

祖弦(1990-)女,碩士,合肥師范學(xué)院計算機(jī)學(xué)院教師。研究方向:數(shù)據(jù)挖掘。

G64

B

1674-2273(2017)03-0074-03

猜你喜歡
詞法文法原理
基于包絡(luò)解調(diào)原理的低轉(zhuǎn)速滾動軸承故障診斷
了解咳嗽祛痰原理,有效維護(hù)健康
平均場正倒向隨機(jī)控制系統(tǒng)的最大值原理
中國石油大學(xué)勝利學(xué)院文法與經(jīng)濟(jì)管理學(xué)院簡介
西夏文銅鏡的真言文法與四臂觀音像研究
應(yīng)用于詞法分析器的算法分析優(yōu)化
Similarity measurement method of high-dimensional data based on normalized net lattice subspace①
化學(xué)反應(yīng)原理全解讀
25年呵護(hù)患病妻子不離不棄
語文學(xué)習(xí)方法之組詞法淺談