摘要:“編譯原理”是高校計(jì)算機(jī)類(lèi)專(zhuān)業(yè)的重要基礎(chǔ)和骨干課程,本文分析了該課程的重要性及教學(xué)目的,討論了課程中采用的多種教學(xué)方法,并就實(shí)踐環(huán)節(jié)進(jìn)行了設(shè)計(jì)。實(shí)踐證明,教學(xué)環(huán)節(jié)的設(shè)置與教學(xué)方法的選擇適應(yīng)學(xué)生的認(rèn)知規(guī)律,有助于學(xué)生理解知識(shí)和鍛煉能力。
關(guān)鍵詞:編譯原理;理論教學(xué);教學(xué)方法;實(shí)踐教學(xué)
1研究背景
“編譯原理”是計(jì)算機(jī)及相關(guān)專(zhuān)業(yè)的一門(mén)重要專(zhuān)業(yè)課程,著重培養(yǎng)學(xué)生的程序設(shè)計(jì)和實(shí)現(xiàn)能力,在計(jì)算機(jī)科學(xué)中有很重要的地位,被列入國(guó)際ACM91教程。編譯程序構(gòu)造的基本原理和技術(shù)蘊(yùn)涵了計(jì)算機(jī)科學(xué)解決問(wèn)題的思路和抽象解決問(wèn)題的方法,其中的設(shè)計(jì)思想、算法、思維方式和技術(shù)都會(huì)對(duì)學(xué)生今后的發(fā)展產(chǎn)生比較大的影響,甚至還有“編譯原理對(duì)計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的重要性與高等數(shù)學(xué)對(duì)理科學(xué)生的重要性幾乎可以相提并論”[1]的說(shuō)法,可見(jiàn)其重要性。編譯原理與其他計(jì)算機(jī)學(xué)科課程關(guān)系緊密,如高級(jí)程序設(shè)計(jì)語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、軟件工程等,是一門(mén)理論深度和實(shí)踐要求并重的課程。
學(xué)習(xí)一門(mén)課程,首先應(yīng)該明確學(xué)習(xí)目的,這樣才能有針對(duì)性地學(xué)習(xí),提高學(xué)習(xí)熱情。本課程系統(tǒng)地向?qū)W生介紹編譯系統(tǒng)的結(jié)構(gòu)、工作原理及編譯程序各組成部分的設(shè)計(jì)原理和實(shí)現(xiàn)技術(shù),學(xué)生學(xué)習(xí)后,既應(yīng)掌握編譯理論和方法的基本知識(shí),也應(yīng)具有設(shè)計(jì)、實(shí)現(xiàn)、分析和移植編譯程序的初步能力,為從事計(jì)算機(jī)軟件開(kāi)發(fā)及理論研究打下堅(jiān)實(shí)的基礎(chǔ)。
為了實(shí)現(xiàn)本課程的教學(xué)目標(biāo),筆者采用了多種教學(xué)方法,并就實(shí)踐環(huán)節(jié)進(jìn)行了設(shè)計(jì),以下就是筆者的教學(xué)實(shí)踐總結(jié)和反思。
2理論課教學(xué)
2.1啟發(fā)式教學(xué)
“啟發(fā)式教學(xué)”是先進(jìn)的教學(xué)模式之一,強(qiáng)調(diào)傳授知識(shí)的同時(shí)重視學(xué)生能力的培養(yǎng)及非智力因素的發(fā)展。它把學(xué)生真正置于主動(dòng)者位置,充分調(diào)動(dòng)學(xué)生的積極性,激發(fā)學(xué)生的學(xué)習(xí)興趣。由于本課程理論性較強(qiáng),概念原理較多,所以充分發(fā)揮學(xué)生的積極性就顯得尤為重要。
在授課過(guò)程中,教師注重引導(dǎo)學(xué)生自我發(fā)現(xiàn)問(wèn)題。例如在講解句型分析內(nèi)容時(shí),提到自頂向下和自底向上分別體現(xiàn)推導(dǎo)和歸約的本質(zhì),及每一種方法的特點(diǎn)和局限性。通過(guò)教師引導(dǎo),學(xué)生意識(shí)到如何選擇產(chǎn)生式和如何識(shí)別可歸約串是這兩種方法的根本問(wèn)題。有了以上認(rèn)識(shí),對(duì)語(yǔ)法分析內(nèi)容的學(xué)習(xí)也非常重要,教師同時(shí)啟發(fā)學(xué)生對(duì)知識(shí)的遷移,在講到LR分析方法可歸約前綴圖的構(gòu)造時(shí),可與詞法分析中構(gòu)造的狀態(tài)圖作對(duì)比,得出可歸前綴圖的射出弧上不僅可標(biāo)記終結(jié)符,還可標(biāo)記非終結(jié)符的結(jié)論,通過(guò)對(duì)前序內(nèi)容的遷移,指出知識(shí)的前后關(guān)系,以加深學(xué)生對(duì)知識(shí)的理解。
2.2任務(wù)驅(qū)動(dòng)教學(xué)
所謂“任務(wù)驅(qū)動(dòng)”,就是將要學(xué)習(xí)的新知識(shí)隱含在一個(gè)或幾個(gè)任務(wù)中,學(xué)生通過(guò)對(duì)任務(wù)進(jìn)行分析、討論,明確涉及的知識(shí),并找出新知識(shí),然后在教師的指導(dǎo)幫助下找出解決問(wèn)題的方法,在完成任務(wù)的同時(shí)培養(yǎng)學(xué)生分析問(wèn)題、解決問(wèn)題的能力。在該課程中,詞法分析的功能和任務(wù)以及有限自動(dòng)機(jī)等分析工具的內(nèi)容較抽象,是教學(xué)的重點(diǎn)和難點(diǎn),采用任務(wù)驅(qū)動(dòng)法能達(dá)到較好的效果。
詞法分析是編譯的第一個(gè)階段,該階段的任務(wù)是從左到右逐個(gè)字符對(duì)源程序進(jìn)行掃描,產(chǎn)生一個(gè)個(gè)單詞序列,用以進(jìn)行語(yǔ)法分析。直白地說(shuō)就是輸入源程序,輸出單詞符號(hào)。例如下面是學(xué)生熟悉的C語(yǔ)言程序[2]:
main()
{float a, b,h,s;
s=(a*b+a*h+b*h) *2;}
通過(guò)詞法分析得到單詞符號(hào)結(jié)果:
保留字:main,float
標(biāo)識(shí)符:a,b,h,s
常數(shù):2
運(yùn)算符:=,*, +
界符:,;( ){ }
單詞序列已完成,如何描述以上的單詞符號(hào)成為問(wèn)題的關(guān)鍵,我們采用正規(guī)文法構(gòu)造單詞,通過(guò)分析得到如下正規(guī)文法:
G[S]:
S—> F | I | D | O | B
F—> float
I—>a | b | h | s
D—>2
0—> = | * | +
B—> ,| ;( | ) | { | }
其中F為保留字;I為標(biāo)識(shí)符;D為常數(shù);O為運(yùn)算符;B為界符。具備了正規(guī)文法知識(shí),講解形式語(yǔ)言與自動(dòng)機(jī)理論知識(shí)時(shí)就較易被學(xué)生接受。
2.3案例式教學(xué)
“案例式教學(xué)”是從典型事例分析評(píng)價(jià)中加深學(xué)生對(duì)所學(xué)理論的理解,提高運(yùn)用該理論的能力。
“編譯原理”中的難點(diǎn)、重點(diǎn)通常以理論性、抽象性、枯燥性為特征,而案例式教學(xué)具有實(shí)踐性、形象性、生動(dòng)性的特點(diǎn),恰好可彌補(bǔ)其不足,充分調(diào)動(dòng)學(xué)生興趣,使其在分析案例、得出結(jié)論的過(guò)程中提高創(chuàng)新能力[3]。
在教學(xué)過(guò)程中,案例的主要形式是例題,一般是具有代表性的例題或綜合習(xí)題,約占2/3的課堂時(shí)間。在自動(dòng)機(jī)理論中,正則式或正則文法轉(zhuǎn)化成等價(jià)的NFA、NFA轉(zhuǎn)換為等價(jià)的DFA、DFA的最小化等內(nèi)容,可用一道綜合題將這部分知識(shí)融會(huì)貫通,教學(xué)效果很好;LL(1)分析方法、優(yōu)先分析方法、LR分析方法等內(nèi)容也都可以通過(guò)實(shí)例實(shí)現(xiàn)教學(xué)。而反例的選擇可以包括非LR(0)的SLR(1)文法、非SLR(1)的LR(1)文法、非LALR(1)的LR(1)文法,以更好地說(shuō)明每種文法的特點(diǎn)及區(qū)別和聯(lián)系。教學(xué)內(nèi)容結(jié)束后教師布置作業(yè),學(xué)生自己變?yōu)閷?shí)例教學(xué)模型的主體,教師再就作業(yè)中出現(xiàn)的問(wèn)題安排習(xí)題課,效果更佳。除課本上的例題外,教師還可選擇一些考研試題,拓展學(xué)生的知識(shí)面。
2.4演示教學(xué)
在課堂教學(xué)中,合理結(jié)合黑板、粉筆和先進(jìn)的多媒體教學(xué)技術(shù),可適當(dāng)降低教學(xué)速度,使學(xué)生有充裕的時(shí)間思考,也能提高學(xué)生的重視程度。我們除制備完整的多媒體教學(xué)課件外,還設(shè)計(jì)了模擬LL(1)分析方法全過(guò)程的Flash動(dòng)畫(huà),有利于學(xué)生形象記憶分析全過(guò)程。在講授詞法分析時(shí)演示分析程序,得到詞法分析后的輸出序列如圖1所示,通過(guò)修改源程序顯示不同的甚至是包含錯(cuò)誤提示的輸出結(jié)果,使學(xué)生加深對(duì)理論知識(shí)的理解。
3實(shí)踐課教學(xué)
實(shí)踐活動(dòng)是創(chuàng)新意識(shí)的源泉,是創(chuàng)新能力的基礎(chǔ),學(xué)生只有在不斷的實(shí)驗(yàn)環(huán)節(jié)中嘗試、探索、研究和創(chuàng)新,才能不斷提高解決工程問(wèn)題的能力。因此,要培養(yǎng)學(xué)生的創(chuàng)新意識(shí)和創(chuàng)新能力,除了培養(yǎng)學(xué)生的開(kāi)放型思維和科學(xué)精神外,實(shí)踐能力的培養(yǎng)最重要。
“編譯原理”課程對(duì)實(shí)踐性要求較高,學(xué)生在實(shí)驗(yàn)中掌握一些重要算法,將數(shù)據(jù)結(jié)構(gòu)、高級(jí)語(yǔ)言等內(nèi)容融會(huì)貫通,最終提高各門(mén)知識(shí)的綜合應(yīng)用能力。編譯原理實(shí)驗(yàn)加強(qiáng)了學(xué)生對(duì)編譯理論知識(shí)的理解,消除其對(duì)該課程的“神秘感”和“恐懼感”。在教學(xué)設(shè)計(jì)中,我們精心設(shè)計(jì)了三個(gè)實(shí)驗(yàn),分別是詞法分析程序、語(yǔ)法分析—LL(1)和語(yǔ)法分析—LR。教師在每個(gè)實(shí)驗(yàn)前明確實(shí)驗(yàn)?zāi)康暮鸵?,演示成果及結(jié)果,使學(xué)生更明確要完成的任務(wù)。
實(shí)現(xiàn)詞法分析器的設(shè)計(jì)需要兩個(gè)關(guān)鍵步驟:先要掃描需要分析的源代碼,過(guò)濾掉其中的空格、換行符、注釋等字符;再把得到的字符和保留字表中的字符進(jìn)行比較,看是否存在該字符,若存在則打印出該字符串,并說(shuō)明在保留字表中的位置,為下一步語(yǔ)法分析做準(zhǔn)備,否則提示錯(cuò)誤信息,如圖1所示。完成詞法分析器功能后,要求學(xué)生編寫(xiě)程序?qū)崿F(xiàn)自動(dòng)機(jī)理論知識(shí),圖2是從NFA到DFA的構(gòu)造及DFA最小化的構(gòu)造過(guò)程。
對(duì)于自頂向下的語(yǔ)法分析程序—LL(1),F(xiàn)IRST、FOLLOW、SELECT集合的計(jì)算方法一直是學(xué)習(xí)的難點(diǎn),學(xué)生通過(guò)實(shí)驗(yàn)可以充分理解這三個(gè)集合的意義,掌握確定的自頂向下的分析思想,教師在教學(xué)中需重點(diǎn)強(qiáng)調(diào)編程中的左遞歸和回溯現(xiàn)象問(wèn)題。
自底向上LR分析法有一系列算法,在詞法分析程序的基礎(chǔ)上,構(gòu)造該分析法對(duì)符號(hào)表中的單詞進(jìn)行語(yǔ)法分析,對(duì)符合給定文法規(guī)則的字符串輸出結(jié)果,否則提示錯(cuò)誤,如圖3所示。除此之外,對(duì)學(xué)有余力的學(xué)生,可以使用程序動(dòng)態(tài)演示可歸前綴圖的構(gòu)造過(guò)程和LR分析表的構(gòu)造過(guò)程,加深學(xué)生對(duì)所學(xué)理論知識(shí)的理解。
對(duì)課程中部分經(jīng)典算法的實(shí)現(xiàn)培養(yǎng)了學(xué)生的實(shí)踐動(dòng)手能力,使學(xué)生學(xué)以致用,加深理解,鞏固知識(shí),真正將書(shū)本上的理論知識(shí)變?yōu)閷W(xué)生知識(shí)儲(chǔ)備庫(kù)中的知識(shí)。為督促學(xué)生自主學(xué)習(xí),老師不僅要檢查每位學(xué)生的實(shí)踐結(jié)果,還要就算法內(nèi)容、編程知識(shí)的理解、編譯原理的應(yīng)用等內(nèi)容提出疑問(wèn),使學(xué)生不局限于掌握課本內(nèi)容,還熟悉計(jì)算機(jī)知識(shí)的全面整合。
4結(jié)語(yǔ)
通過(guò)“編譯原理”課程學(xué)習(xí)編譯程序的構(gòu)造原理和實(shí)現(xiàn)技術(shù),學(xué)生不僅能掌握編譯程序本身的實(shí)現(xiàn)技術(shù),也能加深對(duì)程序設(shè)計(jì)語(yǔ)言的理解,提高語(yǔ)言的設(shè)計(jì)和開(kāi)發(fā)大型軟件的能力,還能提高抽象思維能力和形式化描述能力。編譯及相關(guān)技術(shù)在很多領(lǐng)域都有廣泛應(yīng)用,如逆向工程[5]、通信協(xié)議[6]、軟件再工程等,這更凸顯了本課程的重要性。通過(guò)多年教學(xué)實(shí)踐并對(duì)近兩屆學(xué)生成績(jī)的分析證明,本課程教學(xué)環(huán)節(jié)的設(shè)置與教學(xué)方法的選擇適應(yīng)學(xué)生的認(rèn)知規(guī)律,有助于學(xué)生理解知識(shí)、提高能力。
參考文獻(xiàn):
[1] 陳文宇. 關(guān)于“編譯原理”課程教學(xué)的思考[J]. 實(shí)驗(yàn)科學(xué)與技術(shù),2008(12):80-82.
[2] 李娟,孫濤. “編譯原理”課程教學(xué)改革實(shí)踐[J]. 高師理科學(xué)刊,2007(7):93-95.
[3] 岳小婷. 貫徹以人為本,推進(jìn)“編譯原理”教學(xué)改革[J]. 福建電腦,2008(1):213-214.
[4] 陳意云. “編譯原理”的教學(xué)與實(shí)際相結(jié)合的探討[J]. 教育與現(xiàn)代化,2005(12):32-36.
[5] 胡燕京. 編譯技術(shù)研究與逆向工程研究[J]. 現(xiàn)代電子技術(shù),2007(16):99-101.
[6] 劉希遠(yuǎn). 編譯原理在通信協(xié)議轉(zhuǎn)換中的應(yīng)用[J]. 甘肅工業(yè)大學(xué)學(xué)報(bào),2000(9):69-72.
Research and Practice of the Teaching Method of “Compiler Principles”
WANG Shun-ye
(Department of Computer Science and Technology, Langfang Teachers College, Langfang 065000, China)
Abstract: “Compiler Principles” is a basic and essential course for college students majoring in computer related fields. This article analyzes the importance and the purpose of teaching, discusses many teaching method, and designs the practice arrangements. We believe that the arrangements and methods adapt to the students’ cognitive rules and can help them understand and take exercises.
Key words: Compiler Principle; teaching in theory; teaching method; practice teaching