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