沈 睿 朱學君
(1.河西學院 信息技術與傳媒學院,甘肅 張掖 734000;2.河西學院 信息技術中心,甘肅 張掖 734000)
從1946年第一臺計算機產生至今,計算機的發(fā)展僅僅過去了不到70年的時間,從最初單一的僅由0和1組成的機器語言發(fā)展到現(xiàn)在的多種高級語言,編譯技術起了決定性的作用,正是編譯技術迅速、成熟的發(fā)展,人們才能擺脫繁瑣的機器語言,走進和自然語言相近的高級語言時代。
《編譯原理》課程主要是研究基于形式語言理論的編譯技術,是計算機專業(yè)的專業(yè)核心課程之一,課程主要介紹編譯程序是如何將高級語言程序翻譯成機器能夠執(zhí)行的低級語言程序的工作原理和方法,編譯程序經歷的各個階段,以及這些階段的功能和構造?!毒幾g原理》課程的先行課程主要有數(shù)據(jù)結構、離散數(shù)學、計算機組成原理、線性代數(shù)和程序設計基礎等,該課程的目的是在于系統(tǒng)地向學生講述編譯系統(tǒng)的結構、工作流程以及編譯程序各組成部分的設計原理和實現(xiàn)技術,使學生通過本課程的學習,既掌握編譯理論和方法方面的基本知識,同時也獲得設計、分析和移植編譯程序方面的初步能力,進而提高學生設計多種軟件的素質。[1]
《編譯原理》課程是計算機專業(yè)中公認的難教難學課,課程的理論性強,抽象性高,但是鑒于其在計算機中起的決定性作用,各個高校的計算機專業(yè)都將其列為非常重要的專業(yè)課,而且在研究生期間還繼續(xù)開設該課程。課程不但涉及了形式語言理論、自動機、編譯技術等抽象的內容,而且也是程序設計、算法、數(shù)據(jù)結構、離散數(shù)學等知識的綜合體現(xiàn)。課程幫助學生了解計算機的工作過程,認識計算機信息處理的實質,而且其中的一些算法也很經典,通過《編譯原理》課程的學習,可以提高學生對計算機系統(tǒng)的總體認識,對理解算法、程序設計思想和編寫更高效的代碼具有重要的影響。
《編譯原理》課程是一門理論性和技術性都非常強的課程,內容豐富而且抽象,而且不像一些應用類課程,除非是專業(yè)從事編譯技術的人員,否則對于學生而言無實際應用價值,缺乏學習的積極性,而且學生在學習的過程中,容易忽略各章之間的連貫性,僅僅是掌握了一些獨立的算法,分離的知識點,抓不住重點,分不清主次。要想取得良好的教學效果,首先要讓學生認識到課程的重要性,再配合以合理的教學方法和手段。因此,在《編譯原理》課程的教學中,可以采取多種教學方式和教學模式,較好的完成教學效果。
(1)講授式教學法:課程理論性很強很多多,講授法就是首選的最直觀的的方法。但編譯技術中涉及了大量的抽象概念,所以填鴨式的講授法不能取得好的教學效果。對于抽象的理論,要盡量采用形象、生動、直觀、具體的講授方式,充分調動學生的積極性和興趣,注重知識點的連貫和系統(tǒng)性,引導學生的思維,注重學生信息反饋,教學相長。比如說,講到編譯系統(tǒng)的組成和功能,為了將之后的詞法分析、語法分析、語義分析、代碼優(yōu)化、目標代碼生成等階段連貫起來,可以在講授的過程中制作一些動畫,將各個階段連貫起來?;蛘邔⒕幾g過程和英翻漢的過程做對比講解,英翻漢首先要搞清楚各個單詞的含義,也就是詞法分析過程,然后將句子的結構劃分清楚,就是語法分析,接下來給出句子的意思,即語義分析,然后注意前后順序,將句子的中文含義給的更貼合中文習慣,即代碼優(yōu)化,最后給出完整、準確的中文,就是目標代碼生成了。這樣的講授方式,學生更能夠接受,而且通過例子,學生充分理解了什么是編譯過程。
(2)啟發(fā)式教學法:這種教學方法主要是教師根據(jù)教學任務和學生的實際情況,以啟發(fā)學生思考為核心,調動學生的主動性和積極性,促進學生主動學習。對于課程中出現(xiàn)的大量算法,可以采用這種教學方式,比如講到文法的二義性,可以不要直接講授定義,可以給出一個二義性文法,一個同樣的句型,讓學生自己推導,畫出語法樹,由于推導習慣和分析角度的問題,肯定會有不同結果,讓學生自己分析,為什么會產生不同結果,產生不同結果會對句型分析造成的影響等等,然后再引出二義性的概念,通過學生自己的分析,得出了和二義性相關的結論,不但提高了學生的積極性,還加深了對抽象理論的理解。
(3)案例教學法:采用具體的案例,在講解案例的過程中,將知識點貫穿其中,將抽象的問題具體化。案例教學主要是鼓勵學生主動思考,變注重知識為注重能力,重視學生和老師、學生和學生之間的雙向交流。在編譯原理的學習過程中,預測分析是一種很重要的分析技術,但是學生常常將理論和應用聯(lián)系不起來。因此,在教學過程中,可以先給出一個具體的預測分析表,根據(jù)這個分析表做相應的語法分析,也就是先給出預測分析表的應用。然后根據(jù)文法,討論如何產生該分析表。通過選擇和教學內容相符的案例,配以形象、直觀、生動的授課形式,易于學生接受和理解理論基礎,并將理論應用與實踐中,進一步深化和鞏固專業(yè)知識。
(4)對比教學法:通過對一些知識點的比較,尋找知識點間的異同。這種方法促使學生多元化解讀,多角度思考,激發(fā)討論,區(qū)分異同,知識結構清晰,學生就能更好的理解和掌握,不會造成知識點混亂。比如講到有窮狀態(tài)自動機中,確定(DFA)和非確定(NFA)兩種時,先講DFA的生成和運行,然后給一個NFA的文法,讓學生構造FA,然后運行,查看結果,總結兩種FA的不同,闡述不同的FA運行時不同的結果,然后在文法中查找根源,總結為何文法會產生兩種不同的FA,從而,掌握什么樣的文法會產生什么樣的FA,以及兩種FA的異同。通過對比教學,學生能夠充分理解兩個相近的知識點,而且不會產生混淆。
《編譯原理》課程不但要求學生掌握編譯系統(tǒng)的結構和工作流程,還要培養(yǎng)學生設計編譯程序的基本能力,而且其中還有許多的經典算法,通過實踐,不但能夠加深學生對抽象理論的理解,還能提高學生分析、設計軟件的能力,培養(yǎng)學生的專業(yè)能力,提高學生的專業(yè)素質。
在實踐過程中,大部分學校的實踐環(huán)節(jié)都存在或多或少的問題。一些學校不重視實踐課程,甚至沒有實踐環(huán)節(jié),認為現(xiàn)有的編譯系統(tǒng)很成熟,不存在再開發(fā)的問題,而且以后從事專業(yè)的編譯技術的人很少,沒必要開設。還有一些實驗設計不合理,只是將一個一個獨立的算法給出,讓學生編寫一些小型的程序,不能夠體現(xiàn)知識的系統(tǒng)性和連貫性。
針對以上的情況,要進行實踐改革,首先要重視實踐環(huán)節(jié)的教學,認清通過實踐不但可以加深學生對理論的理解,還可以讓學生更深層次的了解編譯程序的構造和設計,關鍵是培養(yǎng)和提高了學生的編程能力,培養(yǎng)了學生分析軟件和設計軟件的能力。其次要合理的設計實驗內容和實驗方案。在設計實驗的過程中,要注重知識的連貫性,好多學生反映不能將編譯原理中的各個模塊統(tǒng)一在一起,掌握的知識仍然是分離的。在實驗中注重連貫性,就可以解決這一問題。例如在詞法分析模塊,第一部分是先將文法以合理的結構存放在計算機內,然后根據(jù)文法生成相應的FA,如果是NFA要將其確定化,轉為DFA。第二部分就可以運行FA了,根據(jù)運行的結果,識別出一個一個的單詞。第三部分,將識別出的單詞構造成屬性字序列。通過這三部分的實驗,不但完成了詞法分析程序的構造,也將理論中講解的各個部分聯(lián)系起來,形成知識體系,幫助學生理解和掌握了詞法分析的功能和程序構造。還要注意合理的安排實驗時間,編譯原理不是每節(jié)課都有實踐部分,有些學校統(tǒng)一的將實踐安排在課程最后,這樣可能會造成理論和實踐的脫節(jié)。最好是能夠在一個模塊結束后,該模塊的相關實踐隨之完成。這樣能夠讓實踐和理論相互促進,強調知識點之間的邏輯聯(lián)系,幫助學生更好的掌握知識。最后要有合理的評價機制,將實踐部分放入考核,每次實踐要求學生給出實現(xiàn)的代碼,并提交相應的文檔,教師根據(jù)代碼、結果和文檔給出實踐成績,將其列入最后的總評成績,從而激發(fā)學生的主動性和積極性。通過實驗教學改革,不但鞏固了學生的理論知識,而且引導他們將理論應用于實踐,同時也有助于學生自身編程水平和算法設計能力的提高,為下一步的專業(yè)學習打下堅實的基礎。[2]
《編譯原理》課程在培養(yǎng)學生的抽象思維、邏輯思維和編程能力方面都起著積極促進的作用,要抓住該課程的重點,分清主次,將知識點連貫起來,充分采用多種教學模式和方法將抽象的內容形式化,通過實踐再將理論知識應用于實踐,激發(fā)學生的積極性,促進學生自主學習,讓學生掌握知識和技能,學會思考,培養(yǎng)創(chuàng)新精神,提高對計算機系統(tǒng)的總體認識。
[1]吳其林.“編譯原理”課程的教學探討[J].電腦知識與技術,2012,1.
[2]孟丹.編譯原理實驗教學分層案例化改革探索[C]//北京高教學會實驗室工作研究會,2010年學術研討會論文集.2010,12.
[3]崔少國.“編譯原理”課程教學方法的探索與實踐[J].福建電腦,2012,1.
[4]張艷.“編譯原理”課程建設的新思考[J].中國電力教育,2012,8.