“編譯原理”教學建設探討
時間:2022-03-26 03:38:24
導語:“編譯原理”教學建設探討一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
摘要:文章介紹了“編譯原理”在計算機專業中的重要地位,分析了學生學習該課程過程中存在的難點。提出了對“編譯原理”課程實驗教學建設的一些想法和建議,并分析了這些變化對學生產生的影響。
關鍵詞:編譯原理;實驗教學;建設
“編譯原理”是計算機專業非常重要的一門專業課,在計算機教學中有著舉足輕重的地位。同時,編譯系統是整個計算機系統中極其重要的系統軟件,它的作用是把計算機高級語言最終翻譯成等價的計算機指令,從而保證高級程序設計語言順利運行。所以,“編譯原理”是計算機科學中基本研究內容之一。“編譯原理”課程主要介紹了編譯的基本原理、技術以及實現的方法。主要包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化、目標代碼生成等六大部分。通過以上學習,使學生系統掌握設計一般編譯器的原理和方法,也能夠同時加深學生對高級語言的認識,提高學生的綜合編程水平和算法設計能力。“編譯原理”是計算機專業中最難的一門專業課之一,在理論上要求學生掌握形式語言和自動機等比較抽象的概念,在技術上要求學生能熟練利用各種方法設計程序,因此對學生的各方面水平要求比較高,對學生來說具有很大的挑戰性。
1“編譯原理”課程教學現狀
“編譯原理”課程目前在教學中出現的問題主要有以下幾方面。(1)編譯課程內容抽象,采用以往灌輸式的教學模式,教學方法單一,無法讓學生提起興趣。“編譯原理”課程中的概念和算法大都是以符號、自動機、屬性文法等抽象度很高的形式描述,光看教材會難免覺得枯燥無味。如果教師還是用以往的方式灌輸式教學,那么因為上述的原因,在整個教學中,學生學習知識很被動,學習知識缺乏動力,造成課難學的印象。(2)學生學習過程中常常會認為編譯在開發軟件過程中應用不多,因此也很難提起學生的主動性。“編譯原理”這門課程包含的知識和算法,都有很高的難度。與此同時,學生覺得教材中的理論知識和算法應用性不強。編譯原理中很多算法,比如LL和LR語法分析算法,代碼優化技術等,只有在編譯開發中能用到,而學生也不會從事這方面的研發,加上實現難度過大,會給學生造成難學的印象。(3)學生之前學習高級語言程序設計,數據結構等課程掌握程度不好,也會影響學生的學習情況。“編譯原理”是大三的課程,它的先修課程一般在大一大二學習,如果學生之前就沒有很好的學習相關知識,就會感到學習非常困難,比如數據結構中的“棧”,如果不了解,就會直接影響語法分析的理解和上機操作。(4)課時有限,有時剛上完課,學期就結束了。由于高校的改革,很多課程都遭到壓縮,給教學帶來了一定的難度。很多高校在實驗課上進行了壓縮,僅僅學習編譯的理論和算法,沒有相應的實踐,使得學生無法將理論具體、形象化,就難以更好地理解運用,更難說全面融會貫通整個編譯器。以上問題的焦點在于,本身編譯就已經很抽象了,學生晦澀難懂,如果再沒有相應的實驗做支撐,難免會讓學生有難學的印象,從而進一步影響編譯課程的教學質量。因此,在理論學習的同時,如何在有限的時間做好相關的實驗教學,使得整個教學過程鮮活起來,讓學生真正認識到編譯是計算機的重要課程,必須學好,對以后算法設計,程序設計都會帶來巨大幫助,是教學中必須面對并解決的問題。近年來,國內學校在“編譯原理”教學方面也積累了大量的經驗,上海交通大學張冬茉等[1]提出了現階段進行大型“編譯原理”課程設計的教學模式和方法,使學生能夠通過實現一個實用的編譯系統,提高對編譯原理的認識。合肥師范學院祖弦等[2]針對每部分的核心知識點,設計實驗教學實例,探討在實驗案例驅動下的“編譯原理”課程教學創新方案。
2實驗教學建設
“編譯原理”課程理論性很強,實踐性更強,是兩者相結合的課程。理論部分抽象、難懂。所以,在理綸學習過程中,適當地穿插實驗,可以加強學生對重要知識點的認識和理解,同時也可以很好地培養學生的編程能力。實驗總體分為兩部分:(1)對“編譯原理”中每一部分重要方法做相應的實驗。(2)最終整合這些部分,成為一個簡單的編譯器。2.1詞法分析器。使用DOS環境輸入字符串序列(以‘#’作為結束標志)作為源程序,調用詞法掃描程序將字符串以二元組的形式進行輸出(若有不屬于語言單詞的符號出現,則做出錯處理),詞法掃描程序包括了對源程序的預處理(忽略無用空格、回車符,換行符等空白符),以及對單詞的識別和分類,以形成(單詞種別,單詞自身的值)形式的二元組,并將用戶自定義變量信息存入程序變量信息表中。2.2語法分析。使用自上而下的遞歸下降分析法,從文法開始符號出發,根據文法規則正向推導出給定的句子。根據遞歸下降的分析函數編寫規則來編寫相應函數,在各個函數分析過程中調用詞法分析程序中掃描程序,發出“取下一個單詞”的命令,從而取得下一個單詞符號作語法分析。2.3語義分析和中間代碼生成。在語義分析和中間代碼生成的階段,采用語法制導翻譯方法,用屬性文法作為工具來描述程序設計語言的語義。首先審查詞法分析得到的每個語法結構的靜態語義,如果靜態語義正確再生成中間代碼(課設中預采用四元式)。2.4代碼優化。代碼優化部分,設計開發一個代碼優化程序,將上一步出現的四元式,進行包括局部、循環和全局等優化,學生將優化后的四元式和優化前的作比較,了解優化在編譯中的重要作用。2.5目標代碼生成。目標代碼生成是編譯的最后一個階段,根據符號表等信息,將中間代碼轉化成為等價的目標代碼。為了減少訪問計算機內存的次數,應盡可能把基本塊內仍然要被引用的變量放到寄存器中,而把基本塊內不再使用的變量所占的寄存器釋放。為了隨時掌握寄存器使用情況和變量的存放情況,以便生成合適的目標代碼,可以建立寄存器描述表以及變量地址描述表。2.6簡單編譯器的設計。以上5組實驗對于編譯過程中的六大部分重點方法進行了實驗,由于內容較為分散,大部分學生不能很好地了解編譯器每個部分是怎么在整個編譯系統中達到協調工作的。經過一個學期的學習,除了在平時上課過程中設計對于每一部分重要知識點的單獨編程,還將開設四學時的集中課程設計。目的是為了設計一個比較完整的的編譯器。題目較為開放(見圖1),是將一個高級語言的一個語句翻譯成最終的目標代碼的過程,學生可以根據學生自身情況自行設計一個適合自己程度的做法:基礎較差的同學,可以針對題目設計一些較為基礎的算法,而基礎較好的同學可以將編譯中諸多算法融入編譯器中,最終生成一個較為復雜的編譯器。通過這個設計,能夠使學生系統地理解編譯的整個過程。由于現在大部分計算機系同學都配有電腦,加上本身編譯課程時間比較緊張,這次課程設計的大部分內容學生可以自行實踐并上交實驗報告。在做以上實驗過程中,可以適當地做分組,讓組內同學進行實驗內容討論,研究出實驗設計方案,并設計程序,以小組為單位上交實驗報告,提高學生團隊協作能力。
3結語
在“編譯原理”實驗教學中,對這門課程實驗內容以及形式做了以上改革,收到了一定的成效。這次改革最為主要的是讓學生把編譯器各個部分的實驗整合為一個編譯器,把編譯所學的內容能夠融會貫通,更好地學習了“編譯原理”這門課程,同時在一定程度上培養了學生編程能力以及團隊協作能力。
[參考文獻]
[1]張冬茉,方習文.編譯原理課程設計的教學實踐和改革[J].實驗室研究與探索,2012(11):134-137.
[2]祖弦,朱強,謝飛.實驗案例驅動的編譯原理教學改革探討[J].合肥師范學院學報,2017(3):74-76.
作者:崔光宇 單位:天津工業大學
- 上一篇:交通信息系統安全建設論文
- 下一篇:數字地質填圖教學建設研究