王麗麗 方賢文
摘要:該文針對編譯原理的重要性以及當前教學中存在的問題,提出了實踐驅(qū)動式教學方法,克服了傳統(tǒng)課堂理論講授式教學方法缺點,以實踐指導運用作為課堂主要教學手段,提高了學生的學習興趣和課程的實用性。經(jīng)實踐證明此方法取得良好的教學效果,對“編譯原理”教學有一定的指導意義。
關鍵詞:編譯原理;實踐驅(qū)動;教學改革
中圖分類號:TP3 文獻標識碼:A 文章編號:1009-3044(2014)31-7392-02
Abstract: The paper proposes a teaching method of practice-driven aiming at the importance of “compiler principle” and the problems existing in the current teaching. The method uses practice and application as the main teaching approach, which overcomes the weaknesses of the traditional depiction teaching method, and improves the students interests in the course and its practicability. It has been proved by practice that the method had achieved a good teaching performance and is instructive for the teaching on “compiler principle”.
Key words: compiler principle; Practice-driven; teaching reformation
1 編譯原理重要性
“編譯原理”是計算機專業(yè)的核心理論課程之一,也被視為此專業(yè)最難的專業(yè)課之一,是此專業(yè)區(qū)別于其他的專業(yè)的標志性課程之一。早在二十世紀六十和八十年代時,國外和國內(nèi)就已經(jīng)設置了“編譯原理”課程[1]。
“編譯原理”課程重點介紹了編譯程序構造的一般原理、基本設計方法、主要實現(xiàn)技術和一些自動化構造工具。包括編譯程序在內(nèi)的翻譯程序具有實現(xiàn)語言的功能,它所涉及的知識領域有形式語言、自動機理論等語言定義、翻譯與實現(xiàn)程序的基礎知識,這些知識正可以讓學生從其中領悟到計算機理論知識的精髓,并可以讓他們從實現(xiàn)的角度來重新審視軟件的開發(fā)過程,從而幫助學生真正的認識軟件,這些對于以后從事應用軟件、編譯系統(tǒng)、語言開發(fā)平臺,甚至操作系統(tǒng)開發(fā)等均有非常大的好處。對于學生來講,畢業(yè)以后無論從事編譯器的開發(fā),還是不從事編譯器的開發(fā),大量的實踐證明此課程的原理和實現(xiàn)技術亦可廣泛應用于一般普通軟件的設計和實現(xiàn),它對程序設計語言的準確掌握,新的編程范型的學習,程序的理解和開發(fā)出正確可行的軟件都是不可或缺的理論基礎知識,所以編譯原理是計算機專業(yè)學生不可缺少的一門專業(yè)課程。
同時“編譯原理”是許多課程中一個綜合性實踐的結合體,其中包括計算機理論、算法設計與分析、離散數(shù)學、軟件工程、程序設計、數(shù)據(jù)結構等,是理論性強同時也是理論應用于實踐的成功典范[2]。編譯原理知識的學習能讓學生對程序設計語言課程中語言的基本單位的定義和作用有更深層次的理解,并對今后從事計算機相關領域項目的開發(fā),有很多思想和觀念是值得借鑒,從而受益匪淺。譬如:編譯程序中采用的一些大量的數(shù)據(jù)結構和算法均是 “數(shù)據(jù)結構” 、“離散數(shù)學”以及“算法設計與分析”等課程知識的典型應用;編譯程序?qū)δ繕舜a的分配與存儲組織功能的實現(xiàn)原理又是“操作系統(tǒng)”的相關知識的應用;編譯程序?qū)χ虚g代碼的優(yōu)化方法則是對數(shù)學、結構程序設計、邏輯學以及優(yōu)化理論的綜合應用[3]。因此,對編譯原理的研究、學習和實踐編程,可以從多方面提高學生的邏輯思維能力、動手實踐能力、編程調(diào)試和綜合應用的能力,且能有效的提高學生的專業(yè)素質(zhì),此外編譯課程中介紹的理論知識也是有些后續(xù)課程的基礎??偠灾?,”編譯原理”中的基本原理知識是計算機專業(yè)學生必須掌握的,也是計算機專業(yè)相當重要的一門專業(yè)基礎課程。
2 當前教學中存在的問題
眾所周知, “編譯原理”存在一個普遍的現(xiàn)象那就是學難、教難、實驗更難。學生們都普遍認為這門課程學習起來的難度系數(shù)太大,理論性太強,而且表面上看起來實用性也不好,沒有java、jsp等課程實用性那么直觀市場需求量大,這些因素導致學生忽視這門課程的重要性,降低了學習興趣,從而導致出現(xiàn)惡劣的教學效果。下面簡單指出了目前“編譯原理”教學中存在的主要問題。
2.1 課程重要性認識不足
在學習的過程中很多學生認為這門課程是講解編譯程序的構造原理知識,而自己以后涉及到編譯器的設計工作的幾率很低甚至為零,故錯誤的認為“編譯原理“不重要了?!熬幾g原理”的應用價值沒有他們學的一些編程語言和網(wǎng)頁制作語言那么“直接有用”,他們沒有領會到這門課程對于提高他們對計算機知識體系和提高軟件開發(fā)效率與質(zhì)量等方面存在著潛在的意義。通過學習編譯的理論和方法,可以提高學生對程序設計語言的設計和實現(xiàn)等相關知識的綜合理解,而這些知識恰好是準確掌握程序設計語言,理解程序,學習新的編程范型以及開發(fā)出正確的軟件都是不可缺少的基礎知識[4]。
2.2 理論性強,實驗難度太大
“編譯原理”這門課程的基本知識所涉及到的一些重要理論基礎具有很強的
抽象性,從而使學生對其理解產(chǎn)生了較大難度,而且其整體理論性很強,學生學起來覺得枯燥無味。編譯器構造過程中涉及到的算法多而且復雜,實現(xiàn)起來更加困難,不是幾行代碼能輕松完成的,而且需要對C的程序設計語言知識掌握牢固。這一系列的因素導致了學生的學習興趣和動力直線下降。
2.3 課堂教學枯燥無味
由于這門課程大部分的教學模式幾乎都是采用課堂理論教學,實踐教學環(huán)節(jié)比較薄弱,沒有真正的做到實踐和理論結合起來教學。傳統(tǒng)的教學中在課堂上扮演著主要角色均是教師,教學中以教師為中心,教師課堂傳授理論知識,學生機械性的接受,沒有很好的調(diào)動學生的積極性,加上課程本身難度系數(shù)又偏大,從而導致學生學習興趣大打折扣。
雖然目前很多高校都在開設編譯原理這門課程的同時均增加了相應的課程實踐環(huán)節(jié),甚至安排了專門的編譯原理課程設計以加深學生對知識點的掌握, 但是由于編譯原理的實驗題目難度較大,其數(shù)據(jù)結構設計比較困難,并且需要實踐者要有足夠的基礎理論和較強的編程能力作為支撐,所以大多數(shù)學生在課程實踐時都是無從下手,不知道從何做起,實踐效果不理想,這些因素導致了學生對編譯原理的知識理解往往只是停留在書本上的理論概念上,根本不明白如何將這些理論知識運用到實際的編譯程序設計中去。
3 實踐驅(qū)動教學方法
3.1 規(guī)劃教學內(nèi)容
在編譯原理教學之前教師首先規(guī)劃好整個課程教學內(nèi)容,有重點的介紹各章節(jié)的內(nèi)容,讓學生明白各個章節(jié)的教學和上機時間安排。部分章節(jié)如語法分析和語義分析章節(jié)由于這些章節(jié)的程序設計比較復雜,教師可以在傳授理論知識的同時結合程序進行講解和演示,使得學生能夠掌握如何將這些理論知識運用到實際的編譯程序中去,從而避免出現(xiàn)上機無從下手的現(xiàn)象。
3.2 實踐教學與理論教學相結合
編譯原理的課堂教學一開始可以講授編譯系統(tǒng)的總體系統(tǒng),可以在總體結構指導下,將其分解為“詞法分析器設計與實現(xiàn)”、“語法分析器設計與實現(xiàn)”、“語義分析與中間代碼器設計與實現(xiàn)”,每個程序?qū)⒗们耙粋€程序的結構,最終形成一個簡單的編譯系統(tǒng)。在課堂教學中將這些具體實驗程序貫穿到理論教學中,效果會事半功倍,并能夠很好的幫助學生理解和運用理論知識。
比如,關于詞法分析、語法分析中很多的理論描述比較抽象復雜,此時教師在分析理論知識的前提下,結合設計出的“詞法分析器”、“語法分析器”一起講解這些理論知識如何運用到實際的編程中,通過對源代碼的講解能讓學生茅塞頓開,能體會到這些知識的有用性。在課堂教學中更多的強調(diào)如何將這些理論知識通過編程運用到具體的編譯器中,改變了傳統(tǒng)的課堂上的理論教學,以實踐教學為主,這樣通過具體實現(xiàn)源碼加深學生對知識的掌握,既提高了教學效果又營造了輕松愉快的課堂氣氛,師生互動得以更良性的發(fā)展下去。
3.3 課程實驗的加強
目前高校都提倡理論結合實際,比較重視實踐教學。例如筆者學校在二年級和三年級暑假都會安排學生去公司實習,以更好的將課堂中所學的理論知識與實踐結合起來,提高他們的職業(yè)技能素養(yǎng)和動手編程能力。大學整個的課程體系以及人才培養(yǎng)方案都在強化實踐,同時編譯原理課程屬于技術學科,必須注重理論與實踐的有機結合,強調(diào)課程實驗的重要性,加強對學生實踐動手能力的培養(yǎng)。由于編譯原理的實驗涉及到的知識比較多,導致了實驗難度很大,所以在上機實驗安排上我們可以分模塊由易到難循序漸進的開展,例如編譯器的詞法分析器設計相對比較容易,這個實驗可以讓所有的學生都動手去編寫;然后再逐步在詞法分析器的基礎上設計語法分析器,最后再設計出語義分析器。讓學生逐步深入的進行課程實踐,真正的把實踐教學落到實處。
這樣采用功能遞增的方式對實驗進行引導性劃分,使學生在學習詞法分析時就可以著手進行相關的實驗設計,隨著教學的開展和教學內(nèi)容的深化,組織系列化的上機實驗,學生逐步完成詞法分析器的設計與實現(xiàn)、語法分析器的設計與實現(xiàn),一些優(yōu)秀的學生可以進一步完成語義分析與中間代碼生成器的設計與實現(xiàn)。最后一個實驗完成后,學生就已經(jīng)開發(fā)出一個滿足要求的編譯程序了。
(下轉(zhuǎn)第7405頁)
(上接第7393頁)
4 總結
總之,編譯原理在計算機專業(yè)培養(yǎng)計劃中是一門不容忽視的課程,然而傳統(tǒng)的課堂教學存在教難學難實驗更難的現(xiàn)象,如何通過教學手段降低其難度系數(shù),提高學生的課程興趣,使得編譯原理的知識能真正的被學生全面深刻的掌握,是當今編譯原理教學的研究目標。采用本文實踐驅(qū)動式的教學模式,通過實踐發(fā)現(xiàn)能夠很高的改善當前編譯原理原理教學中存在的尷尬問題,能夠激發(fā)學生的學習動力,在課堂上我們更多的強調(diào)實踐學教而不是單純的理論教學,不僅提高了學生對理論知識的掌握程度,而且能夠改善學生的學習主動性,使其不僅知其然更使其知其所以然。 在教學過程中采用多樣的教學手段和靈活的教學方法,不斷提高編譯原理的教學質(zhì)量。
參考文獻:
[1] 黃賢英,劉貞,劉全利.“編譯原理”課程的地位及教改思路[J].重慶科技學院學報,2005,3(103):103-105.
[2] 廖偉志,李文敬. 編譯原理課程教學中計算思維能力的培養(yǎng)方法[J].廣西科學院學報,2012,28(3):232-235.
[3] 陳晶.《編譯原理》課程教學改革初探[J]. 瓊州學院電子信息工程學院學報,2013,20(2):57-59.
[4] 王一賓,陳義仁. 研究性學習理念下的《編譯原理》教學研究[J]. 安慶師范學院學報, 2011,17(4):111-113.“編譯原理”實踐驅(qū)動式教學探討
王麗麗,方賢文
(安徽理工大學 理學院,安徽 淮南 232001)
摘要:該文針對編譯原理的重要性以及當前教學中存在的問題,提出了實踐驅(qū)動式教學方法,克服了傳統(tǒng)課堂理論講授式教學方法缺點,以實踐指導運用作為課堂主要教學手段,提高了學生的學習興趣和課程的實用性。經(jīng)實踐證明此方法取得良好的教學效果,對“編譯原理”教學有一定的指導意義。
關鍵詞:編譯原理;實踐驅(qū)動;教學改革
中圖分類號:TP3 文獻標識碼:A 文章編號:1009-3044(2014)31-7392-02
Discussion of Practice-driven Teaching on Compiler Principle Course
WANG Li-li, FANG Xian-wen
(College of Mathematics and Physics, Anhui University of Science and Technology, Huainan 232001, China)
Abstract: The paper proposes a teaching method of practice-driven aiming at the importance of “compiler principle” and the problems existing in the current teaching. The method uses practice and application as the main teaching approach, which overcomes the weaknesses of the traditional depiction teaching method, and improves the students interests in the course and its practicability. It has been proved by practice that the method had achieved a good teaching performance and is instructive for the teaching on “compiler principle”.
Key words: compiler principle; Practice-driven; teaching reformation
1 編譯原理重要性
“編譯原理”是計算機專業(yè)的核心理論課程之一,也被視為此專業(yè)最難的專業(yè)課之一,是此專業(yè)區(qū)別于其他的專業(yè)的標志性課程之一。早在二十世紀六十和八十年代時,國外和國內(nèi)就已經(jīng)設置了“編譯原理”課程[1]。
“編譯原理”課程重點介紹了編譯程序構造的一般原理、基本設計方法、主要實現(xiàn)技術和一些自動化構造工具。包括編譯程序在內(nèi)的翻譯程序具有實現(xiàn)語言的功能,它所涉及的知識領域有形式語言、自動機理論等語言定義、翻譯與實現(xiàn)程序的基礎知識,這些知識正可以讓學生從其中領悟到計算機理論知識的精髓,并可以讓他們從實現(xiàn)的角度來重新審視軟件的開發(fā)過程,從而幫助學生真正的認識軟件,這些對于以后從事應用軟件、編譯系統(tǒng)、語言開發(fā)平臺,甚至操作系統(tǒng)開發(fā)等均有非常大的好處。對于學生來講,畢業(yè)以后無論從事編譯器的開發(fā),還是不從事編譯器的開發(fā),大量的實踐證明此課程的原理和實現(xiàn)技術亦可廣泛應用于一般普通軟件的設計和實現(xiàn),它對程序設計語言的準確掌握,新的編程范型的學習,程序的理解和開發(fā)出正確可行的軟件都是不可或缺的理論基礎知識,所以編譯原理是計算機專業(yè)學生不可缺少的一門專業(yè)課程。
同時“編譯原理”是許多課程中一個綜合性實踐的結合體,其中包括計算機理論、算法設計與分析、離散數(shù)學、軟件工程、程序設計、數(shù)據(jù)結構等,是理論性強同時也是理論應用于實踐的成功典范[2]。編譯原理知識的學習能讓學生對程序設計語言課程中語言的基本單位的定義和作用有更深層次的理解,并對今后從事計算機相關領域項目的開發(fā),有很多思想和觀念是值得借鑒,從而受益匪淺。譬如:編譯程序中采用的一些大量的數(shù)據(jù)結構和算法均是 “數(shù)據(jù)結構” 、“離散數(shù)學”以及“算法設計與分析”等課程知識的典型應用;編譯程序?qū)δ繕舜a的分配與存儲組織功能的實現(xiàn)原理又是“操作系統(tǒng)”的相關知識的應用;編譯程序?qū)χ虚g代碼的優(yōu)化方法則是對數(shù)學、結構程序設計、邏輯學以及優(yōu)化理論的綜合應用[3]。因此,對編譯原理的研究、學習和實踐編程,可以從多方面提高學生的邏輯思維能力、動手實踐能力、編程調(diào)試和綜合應用的能力,且能有效的提高學生的專業(yè)素質(zhì),此外編譯課程中介紹的理論知識也是有些后續(xù)課程的基礎。總而言之,”編譯原理”中的基本原理知識是計算機專業(yè)學生必須掌握的,也是計算機專業(yè)相當重要的一門專業(yè)基礎課程。
2 當前教學中存在的問題
眾所周知, “編譯原理”存在一個普遍的現(xiàn)象那就是學難、教難、實驗更難。學生們都普遍認為這門課程學習起來的難度系數(shù)太大,理論性太強,而且表面上看起來實用性也不好,沒有java、jsp等課程實用性那么直觀市場需求量大,這些因素導致學生忽視這門課程的重要性,降低了學習興趣,從而導致出現(xiàn)惡劣的教學效果。下面簡單指出了目前“編譯原理”教學中存在的主要問題。
2.1 課程重要性認識不足
在學習的過程中很多學生認為這門課程是講解編譯程序的構造原理知識,而自己以后涉及到編譯器的設計工作的幾率很低甚至為零,故錯誤的認為“編譯原理“不重要了?!熬幾g原理”的應用價值沒有他們學的一些編程語言和網(wǎng)頁制作語言那么“直接有用”,他們沒有領會到這門課程對于提高他們對計算機知識體系和提高軟件開發(fā)效率與質(zhì)量等方面存在著潛在的意義。通過學習編譯的理論和方法,可以提高學生對程序設計語言的設計和實現(xiàn)等相關知識的綜合理解,而這些知識恰好是準確掌握程序設計語言,理解程序,學習新的編程范型以及開發(fā)出正確的軟件都是不可缺少的基礎知識[4]。
2.2 理論性強,實驗難度太大
“編譯原理”這門課程的基本知識所涉及到的一些重要理論基礎具有很強的
抽象性,從而使學生對其理解產(chǎn)生了較大難度,而且其整體理論性很強,學生學起來覺得枯燥無味。編譯器構造過程中涉及到的算法多而且復雜,實現(xiàn)起來更加困難,不是幾行代碼能輕松完成的,而且需要對C的程序設計語言知識掌握牢固。這一系列的因素導致了學生的學習興趣和動力直線下降。
2.3 課堂教學枯燥無味
由于這門課程大部分的教學模式幾乎都是采用課堂理論教學,實踐教學環(huán)節(jié)比較薄弱,沒有真正的做到實踐和理論結合起來教學。傳統(tǒng)的教學中在課堂上扮演著主要角色均是教師,教學中以教師為中心,教師課堂傳授理論知識,學生機械性的接受,沒有很好的調(diào)動學生的積極性,加上課程本身難度系數(shù)又偏大,從而導致學生學習興趣大打折扣。
雖然目前很多高校都在開設編譯原理這門課程的同時均增加了相應的課程實踐環(huán)節(jié),甚至安排了專門的編譯原理課程設計以加深學生對知識點的掌握, 但是由于編譯原理的實驗題目難度較大,其數(shù)據(jù)結構設計比較困難,并且需要實踐者要有足夠的基礎理論和較強的編程能力作為支撐,所以大多數(shù)學生在課程實踐時都是無從下手,不知道從何做起,實踐效果不理想,這些因素導致了學生對編譯原理的知識理解往往只是停留在書本上的理論概念上,根本不明白如何將這些理論知識運用到實際的編譯程序設計中去。
3 實踐驅(qū)動教學方法
3.1 規(guī)劃教學內(nèi)容
在編譯原理教學之前教師首先規(guī)劃好整個課程教學內(nèi)容,有重點的介紹各章節(jié)的內(nèi)容,讓學生明白各個章節(jié)的教學和上機時間安排。部分章節(jié)如語法分析和語義分析章節(jié)由于這些章節(jié)的程序設計比較復雜,教師可以在傳授理論知識的同時結合程序進行講解和演示,使得學生能夠掌握如何將這些理論知識運用到實際的編譯程序中去,從而避免出現(xiàn)上機無從下手的現(xiàn)象。
3.2 實踐教學與理論教學相結合
編譯原理的課堂教學一開始可以講授編譯系統(tǒng)的總體系統(tǒng),可以在總體結構指導下,將其分解為“詞法分析器設計與實現(xiàn)”、“語法分析器設計與實現(xiàn)”、“語義分析與中間代碼器設計與實現(xiàn)”,每個程序?qū)⒗们耙粋€程序的結構,最終形成一個簡單的編譯系統(tǒng)。在課堂教學中將這些具體實驗程序貫穿到理論教學中,效果會事半功倍,并能夠很好的幫助學生理解和運用理論知識。
比如,關于詞法分析、語法分析中很多的理論描述比較抽象復雜,此時教師在分析理論知識的前提下,結合設計出的“詞法分析器”、“語法分析器”一起講解這些理論知識如何運用到實際的編程中,通過對源代碼的講解能讓學生茅塞頓開,能體會到這些知識的有用性。在課堂教學中更多的強調(diào)如何將這些理論知識通過編程運用到具體的編譯器中,改變了傳統(tǒng)的課堂上的理論教學,以實踐教學為主,這樣通過具體實現(xiàn)源碼加深學生對知識的掌握,既提高了教學效果又營造了輕松愉快的課堂氣氛,師生互動得以更良性的發(fā)展下去。
3.3 課程實驗的加強
目前高校都提倡理論結合實際,比較重視實踐教學。例如筆者學校在二年級和三年級暑假都會安排學生去公司實習,以更好的將課堂中所學的理論知識與實踐結合起來,提高他們的職業(yè)技能素養(yǎng)和動手編程能力。大學整個的課程體系以及人才培養(yǎng)方案都在強化實踐,同時編譯原理課程屬于技術學科,必須注重理論與實踐的有機結合,強調(diào)課程實驗的重要性,加強對學生實踐動手能力的培養(yǎng)。由于編譯原理的實驗涉及到的知識比較多,導致了實驗難度很大,所以在上機實驗安排上我們可以分模塊由易到難循序漸進的開展,例如編譯器的詞法分析器設計相對比較容易,這個實驗可以讓所有的學生都動手去編寫;然后再逐步在詞法分析器的基礎上設計語法分析器,最后再設計出語義分析器。讓學生逐步深入的進行課程實踐,真正的把實踐教學落到實處。
這樣采用功能遞增的方式對實驗進行引導性劃分,使學生在學習詞法分析時就可以著手進行相關的實驗設計,隨著教學的開展和教學內(nèi)容的深化,組織系列化的上機實驗,學生逐步完成詞法分析器的設計與實現(xiàn)、語法分析器的設計與實現(xiàn),一些優(yōu)秀的學生可以進一步完成語義分析與中間代碼生成器的設計與實現(xiàn)。最后一個實驗完成后,學生就已經(jīng)開發(fā)出一個滿足要求的編譯程序了。
4 總結
總之,編譯原理在計算機專業(yè)培養(yǎng)計劃中是一門不容忽視的課程,然而傳統(tǒng)的課堂教學存在教難學難實驗更難的現(xiàn)象,如何通過教學手段降低其難度系數(shù),提高學生的課程興趣,使得編譯原理的知識能真正的被學生全面深刻的掌握,是當今編譯原理教學的研究目標。采用本文實踐驅(qū)動式的教學模式,通過實踐發(fā)現(xiàn)能夠很高的改善當前編譯原理原理教學中存在的尷尬問題,能夠激發(fā)學生的學習動力,在課堂上我們更多的強調(diào)實踐學教而不是單純的理論教學,不僅提高了學生對理論知識的掌握程度,而且能夠改善學生的學習主動性,使其不僅知其然更使其知其所以然。 在教學過程中采用多樣的教學手段和靈活的教學方法,不斷提高編譯原理的教學質(zhì)量。
參考文獻:
[1] 黃賢英,劉貞,劉全利.“編譯原理”課程的地位及教改思路[J].重慶科技學院學報,2005,3(103):103-105.
[2] 廖偉志,李文敬. 編譯原理課程教學中計算思維能力的培養(yǎng)方法[J].廣西科學院學報,2012,28(3):232-235.
[3] 陳晶.《編譯原理》課程教學改革初探[J]. 瓊州學院電子信息工程學院學報,2013,20(2):57-59.
[4] 王一賓,陳義仁. 研究性學習理念下的《編譯原理》教學研究[J]. 安慶師范學院學報, 2011,17(4):111-113.