《編譯原理》教學過程中的思考與探討論文

《編譯原理》教學過程中的思考與探討論文

  【摘 要】本文對《編譯原理》教學過程中出現的一系列問題進行了分析,並根據實踐,對編譯原理課程的課堂教學和實驗教學進行了思考和探索。

  【關鍵詞】編譯原理 教學過程 課堂教學 實驗教學

  一、前言

  《編譯原理》是高等院校本科教育計算機專業中一門非常有用的核心課程之一,它對培養學生的抽象思維能力、獨立解決複雜問題的能力以及增強編寫和除錯程式的能力等方面起著很大作用。但是,接觸過編譯原理的學生和老師都知道《編譯原理》是一門難學難教的課程。這門課程的內容比較抽象,理論性很強,不容易理解,而且對實踐也有較高的要求。學生普遍認為編譯原理不實用,因而也就缺乏了學習的熱情與積極性,存在畏難情緒。如何在教學過程中激發學生的興趣,並解決教學中出現的一些問題,我覺得可以從以下幾個方面去思考與探討。

  二、認清編譯原理,明確學習意義,激發學生的熱情

  1.幫助學生認清編譯原理的作用和地位

  在教學過程中,很多學生都有這樣的疑問:編譯原理學的是什麼?學習它有什麼作用?

  我們知道,目前的計算機能執行的都是非常低階的機器語言,一個用高階語言編寫的源程式最終如何在計算機上執行呢?這就是編譯原理要解決的問題。概括地說,編譯原理課程介紹編譯器構造的一般原理、基本設計方法和主要實現技術。編譯原理課程透過編譯器的各個組成部分來解釋高階語言編寫的源程式如何翻譯成計算機能夠執行的機器語言。這個翻譯的過程涉及程式設計語言、機器結構、形式語言理論、型別論、演算法和軟體工程等方面的知識。例如,對軟體工程來說,編譯程式是一個很好的例項(基本設計、模組劃分、基於事件驅動的程式設計等),編譯原理課程所介紹的概念和技術可以用到一般的軟體設計中。

  事實上,透過編譯原理的學習,有助於學生快速理解、定位和解決在程式編譯、測試與執行中出現的問題。另外,編譯原理的學習對熟悉編譯過程、掌握計算機高階語言的生成機制、理解具體程式的執行狀態起著關鍵作用。

  2.幫助學生克服畏難心理,提高學生的興趣

  在教學的過程中,很多學生認為他們今後的工作不會涉及到編譯原理的理論和技術,編譯原理沒有實際的用處,學習起來就非常的枯燥無味。其實這是對編譯原理的一種錯誤認識。該課程中的原理除了可以用於分析編譯器以外,還對諸如人工智慧、並行處理技術等課程的`學習具有指導作用。例如,利用編譯原理的理論設計出“翻譯風”這樣的軟體。與此同時編譯原理課程可以幫助學生更進一步地理解和綜合應用離散數學、高階語言、資料結構、組合語言等專業基礎課程的知識。例如,編譯程式應用了多種資料結構,在詞法分析階段使用狀態轉換圖來識別各種單詞;在語法分析中使用語法樹等來進行語法分析;在儲存分配時使用棧式結構和堆式結構進行儲存空間的分配。本門課程學習對其它課程的學習和今後很多領域的理論研究具有深遠的意義,如計算機軟體技術領域、計算機系統結構領域、人工智慧系統的機器學習領域、並行處理技術等領域。

  鑑於“編譯原理”這門專業課程的特點,在教學過程中端正學生的認識,幫助學生克服畏難情緒,肯定學生所具有的能力,讓學生明白以他們掌握的計算機知識,有足夠的能力學好《編譯原理》這門課程。鼓勵他們同樣可以利用學到的理論技術設計出類似“翻譯風”這樣的軟體,幫助學生建立信心,發揮他們的才智,提高學習的熱情。

  三、把握課堂教學內容

  1.整體把握一條主線,領會每個階段的精髓,各個擊破

  編譯器(編譯程式)可以分為詞法分析、語法分析、語義分析、中間程式碼生成,程式碼最佳化和目的碼生成這六個階段,每個階段還會伴有符號表管理和出錯管理。在第一章編譯器概述中就把編譯器化分成這六個階段,同時還簡要的描述了這六個階段各自的任務,這是貫穿整個課程的一個主線,整個課程就是按這六個階段組織進行的。所以一開始讓學生把握這條主線,對課程有一個總體的把握,理解編譯的過程。

  當學生從整體上理解編譯器的結構之後,然後分章節對各個部分進行細緻地教學。按照編譯過程的劃分,把課程分為六章內容,每章都有它的精髓所在,只要掌握了每章的精髓,就能掌握編譯的整個過程。詞法分析的精髓主要是詞法分析的構造、有限自動機理論的應用;語法分析的精髓主要是語法分析的兩種方法——自上而下分析法和自下而上分析法;語義分析主要是屬性文法、語法制導定義以及翻譯方案;中間程式碼主要描述了中間程式碼常見的幾種表示形式、各種語法結構如何進行語法制導翻譯形成中間程式碼;程式碼最佳化主要圍繞如何從時間和空間上進行最佳化,儘可能提高執行的效率展開,分別講述了局部最佳化和迴圈最佳化;目的碼生成主要是目的碼生成演算法的實現及暫存器的分配。這六個部分相輔相成,互有聯絡,掌握每個階段的精髓,各個擊破,這樣學生比較容易理解和接受。

  2.課堂討論式

  在《編譯原理》的教學過程中,課堂上不能採取“灌輸式”教學,上面老師講解的充滿激情,下面學生聽得昏昏欲睡,隨著時間的積累,學生不理解的知識越來越多,就會慢慢失去學習的興趣。所以,要注重與學生的交流,在課堂上可以採取集體討論和分析的方法,讓學生說出自己在學習的過程遇到的問題以及解決問題的方法。例如,資料對齊是由硬體特點造成的對儲存分配的一點約束,這個概念有的教材並沒有提到或者只是一帶而過。針對資料對齊問題,有一個C語言的例子:

  typedef struct a

  { char cl ;

  long i;

  char c2;

  double f;

  }a ;

  typedef struct_b

  { char cl;

  char c2;

  long i;

  double f;

  )b ;

  main ( )

  { printf( “Sizeof double,long,char= %d, %d , %d ”,sizeof(double) , siz eof( long),sizeof(char));

  printf (“ Sizeof a ,b =%d, %d ,sizeof(a), sizeof(b)) ;

  }

  在X86/Linux機器上,該程式的執行的結果是:

  Size of double,long,char= 8,4,1

  Size of a, b = 20,16

  在SPARC/Solaris工作站上,該程式的執行結果是:

  Sizeof double,long,char=8,4 ,1

  Sizeof a,b = 24,16

  在這個例子中,結構體型別a和b的域名及型別都一樣,僅次序不同,但是它們在同一機器上的儲存分配位元組數不一樣,在不同機器上的情況也不一樣。有的學生就會問為什麼會要考慮資料對齊的問題?這時候,老師可以指導學生課後蒐集相關資料,然後進行課堂討論分析。

  其實,資料對齊對用C語言程式設計、對構造編譯器、對C程式的移植來說都是重要的。利用這樣的例子考察實際編譯器儲存分配的對齊情況,讓學生明白儲存分配時要考慮到資料對齊以及資料對齊的作用。讓學生自己去探索,不僅明白了概念的重要性,增強了學生的理解和應用能力,拓寬了知識面,而且培養了學生思考問題和解決問題的能力,培養了科學嚴謹的思維能力。

  四、精心設計實驗教學內容

  《編譯原理》對實踐的要求比較高,所以實驗課是培養學生實踐能力的重要環節,是鞏固和驗證所學理論知識,培養學生分析問題、解決問題能力的重要環節。但是在教學的過程中,絕大部分學生無法完成編譯原理的實驗。即使告訴學生實驗的思路和演算法,有的還是不知如何入手,整個實驗的效果很差。為了能達到好的實驗效果,極大地促進學生對原理的理解,可以從以下幾個方面思考:

  1.認真設計合適的實驗內容

  編譯技術中有很多經典的演算法,由於課時有限,可以選擇具有代表性的典型演算法來實現。根據課程的特點和大綱的要求,可以設定三個實驗內容:詞法分析器的設計、遞迴下降分析器的設計、LR(0)分析器的設計。很多教材中都有相關的設計算法和程式程式碼片斷,這樣降低了《編譯原理》實驗課的難度。另外,根據老師可以根據的實驗效果對實驗內容再做適當調整。

  2.採用適當的實驗形式

  根據課程的重難點和實驗覆蓋的知識點不同,將《編譯原理》的實驗內容分為兩大部分:獨立實驗和分組實驗。

  在實驗的過程中,將詞法分析器的設計和遞迴下降分析器的設計作為獨立的實驗,由每一個學生自己獨立完成,而將LR(0)分析器的設計作為分組實驗。分組實驗以學生自由組合的小組形式為單位進行,一般一個小組由3至4名學生組成,並推薦一人作為組長,負責師生之間的聯絡,採用分組實驗的形式鍛鍊了團隊分工協作的能力,培養了團隊精神。

  3.教師的耐心指導

  教師在實驗過程中的指導也很重要。教師對學生的指導要細心認真,讓學生記錄下每次實驗的輸入和輸出形式,實現理論與實踐的結合,注意調動學生的積極性,引導他們獨立思考、獨立完成;另外,更要加強實驗結果的監督,提高實驗教學質量。

  五、結束語

  以上結合自己的教學實際,在編譯原理的課堂教學和實驗教學中的一些思考。事實上學好編譯原理課程需要老師和學生雙方的共同努力,需要我們共同不斷的思考、探索、實踐和積累。

  參考文獻:

  [1]張昱,陳意雲,鄭啟龍.編譯原理課程的教學方法和教材建設[J].中國大學教學,2005,(7):61-62.

  [2]餘瑪俐,張海.《編譯原理》教學方法探析[J].九江學院學報(自然科學版),2005,(4):114-118.

  [3]陳意雲,張昱.編譯原理[M].高等教育出版社,2003.

  [4]陳意雲,張昱.編譯原理習題精選[M].中國科學技術大學出版社,2002.

  [5]侯惠芳.《編譯原理》課程教改探討[J].科技資訊,2007,(17):152.193.

最近訪問