摘 要:編輯原理類C教學(xué)語言的性質(zhì)相當于C語言的子集之一,其詞法、語法的定義方面都較為清晰,具有功能較為簡單、結(jié)構(gòu)較為清晰、應(yīng)用較為方便的特點。編輯原理類C教學(xué)語言的編譯程序所采用的方式為一遍掃描結(jié)構(gòu),通過編譯過程幫助學(xué)生從整體上建立對編譯程序的概念。本文主要的研究目的就是在編輯原理課程教學(xué)現(xiàn)狀的基礎(chǔ)上實現(xiàn)類C教學(xué)語言的定義,最終完成類C教學(xué)語言及其編譯系統(tǒng)的實現(xiàn)。
關(guān)鍵詞:編輯原理;類C教學(xué)語言;編譯器
當前,多數(shù)高校中“編輯原理”課程的教學(xué)語言依舊使用PL/O。PL/O屬于PASCAL的子集,學(xué)生對此并不熟悉,導(dǎo)致在“編譯原理”課程學(xué)習(xí)的過程中存在較大的困難。部分高校已經(jīng)意識到這點問題,開始重新選擇“編譯原理”課程的教學(xué)語言,其中SNL、TEST等語言過于簡單,不利于學(xué)生對編輯技術(shù)的掌握;C語言編譯器又過于復(fù)雜,導(dǎo)致學(xué)生在算法中浪費大量的時間,分散學(xué)習(xí)編譯技術(shù)的精力。因此,本文提出了類C教學(xué)語言的設(shè)計,將其作為“編輯原理”課程教學(xué)語言。
1 “編譯原理”課程教學(xué)現(xiàn)狀
當前,“編譯原理”屬于計算機專業(yè)必修專業(yè)基礎(chǔ)課程,在計算機學(xué)科中有著非常重要的地位與作用?!熬幾g原理”課程的主要內(nèi)容為編譯器構(gòu)造原理、編譯器基本設(shè)計、編譯器實現(xiàn)技術(shù)等,是計算機軟件工程技術(shù)人員所需要掌握的重要基礎(chǔ)知識之一,有著無可替代的地位[1]。
“編譯原理”課程在理論方面有著一定程度的深度與難度,很多學(xué)生在學(xué)習(xí)的過程中不能夠充分認識課程中軟件開發(fā)原理及方法方面的潛在價值。高校的“編譯原理”課程教學(xué)中存在著“重理論,輕實踐”的現(xiàn)象。“編譯原理”教材實驗內(nèi)容中采用“PL/O語言編譯程序”,PL/O屬于PASCAL的子集,由于學(xué)生對于PASCAL知識較為陌生,導(dǎo)致學(xué)習(xí)過程中難度增加,對學(xué)生的學(xué)習(xí)興趣造成一定的影響。部分高校已經(jīng)意識到“編譯原理”教學(xué)語言方面存在的問題,已經(jīng)開始對其進行改革,但是由于沒有較為合適的教學(xué)語言,改革的效果不佳。
2 類C語言的定義
本文提到的類C語言實際上就相當于C語言的一個子集[2]。高校計算機專業(yè)的學(xué)生對C語言都較為熟悉,這就奠定了類C語言在“編輯原理”課程應(yīng)用中的基礎(chǔ),一方面能夠提高學(xué)生的學(xué)習(xí)信心與熱情,另一方面能夠確?!熬庉嬙怼闭n程學(xué)習(xí)的實效。
類C語言的單詞符號主要包括標識符、保留字(標識符子集)、分解符(包括單分解符與雙分解符兩種)、注釋符等?!熬庉嬙怼闭n程中的詞法分析較為簡單,在教學(xué)的過程中并不需要進行二元式的輸出,給學(xué)生保留了一定的拓展空間。
類C語言的詞法與語法定義都較為清晰,其基礎(chǔ)為賦值語句,其構(gòu)造概念包括順序、條件、重復(fù)。類C語言一方面包含了PL/O語言的功能與特點,另一方面又具有自身獨特的功能與特點。第一,類C語言的數(shù)據(jù)類型包含整型與字符型兩種數(shù)據(jù)類型,編譯學(xué)生在“編譯原理”課程學(xué)習(xí)的過程中實現(xiàn)語言的擴充。第二,類C語言包含了數(shù)組,為學(xué)生在字符串常量與字符串變量的定義提供了便利。第三,類C語言包含了指針,為學(xué)生實現(xiàn)類C教學(xué)語言擴充提供了可能。第四,類C語言能夠?qū)崿F(xiàn)函數(shù)調(diào)用,在程序執(zhí)行效率方面高于PL/O。第五,類C語言運算豐富。
3 類C編譯器概述
類C編譯器屬于小型的編譯器,其所能夠編譯的語言并不包含全體C集合,而是C中的一個子集。在類C編譯器中所采用的控制程序為Parse()函數(shù),該函數(shù)所采用的分支結(jié)構(gòu)能夠?qū)崿F(xiàn)對全局變量的掃描、預(yù)處理或函數(shù)處理。
類C編譯器的特點包括:第一,類C編譯器能夠依據(jù)翻譯任務(wù)過程中對源程序或中間形式掃描的遍數(shù)對編譯程序進行劃分,主要的編譯程序分類包括一遍掃描與多遍掃描兩種。一遍掃描編譯程序具有效率較高的特點,編譯的速度相對較快,但是具有分工與優(yōu)化不便的缺點,結(jié)構(gòu)與算法不夠清晰。多遍掃描編譯程序具有編譯結(jié)構(gòu)與算法清晰、功能獨立、聯(lián)系簡單等特點,但編譯效率較低。本文所講的類C教學(xué)語言才采用的為一遍掃描編譯程序。第二,類C編譯器中采用的較為簡潔、易懂的算法,讓學(xué)生能夠?qū)⒏嗟淖⒁饬性诰幾g過程中。第三,程序編寫的過程中會在關(guān)鍵部分加入詳細的英文注釋,從而實現(xiàn)了程序可讀性的增強,為學(xué)生程序閱讀提供了方便,促進學(xué)生的能力訓(xùn)練與功能擴展。
4 類C編譯器的詞法分析與語法分析
4.1 類C編譯器的詞法分析
編譯過程中的第一個階段就是詞法分析,主要的任務(wù)是對單詞進行分析與識別。源程序中構(gòu)成為字符序列,詞法分析就是對源程序中的字符進行逐個掃描,依據(jù)詞法規(guī)則對其中的最小語法單位進行識別,進而對其進行分類,為語法分析的輸入奠定基礎(chǔ)。語法分析器在工作的過程中首先需要對輸入程序字符的合法性進行檢查,如果字符正確則向語法分析程序返回一個對應(yīng)的內(nèi)部符號,如果字符錯誤則調(diào)用錯誤處理程序。
詞法分析的主要內(nèi)容包括:第一,對單詞及其屬性進行分析與識別;第二,對各種分隔符進行跳過;第三,對詞法進行檢查,對發(fā)現(xiàn)的錯誤進行報告;第四,依據(jù)需要實現(xiàn)符號表、常數(shù)表格的建立。在類C教學(xué)語言中采用的是一遍掃描編譯程序,因此詞法分析模塊的運行實際上是語法分析模塊進行調(diào)用的,詞法分析與語法分析之間交錯進行。
4.2 類C編譯器的語法分析
編譯程序構(gòu)造方法的理論基礎(chǔ)為語言形式化描述。詞法分析程序構(gòu)造中所采用的為正則文法描述方法,而語法分析程序構(gòu)造中則依賴上下文無關(guān)文法描述方法,其中正則文法描述方法包含在上下文無關(guān)文法描述方法中。上下文無關(guān)文法描述方法能夠幫助類C編譯器語法分析器的實現(xiàn)。
語法分析器主要指的是類C編譯器中的執(zhí)行語法分析的程序,在編譯過程中占據(jù)著核心地位。語法分析的主要任務(wù)是對各類語法成分進行識別,為寓意分析與代碼生成奠定基礎(chǔ);其基本任務(wù)為依據(jù)上下文無關(guān)文法描述方法對源程序中的語法結(jié)構(gòu)進行分析,并在分析的過程中對源程序的語法正確性進行檢查。
5 類C編譯器的語義分析與機器語言
5.1 類C編譯器的語義分析
語義分析的主要任務(wù)為依據(jù)主義規(guī)則對識別的各種語法成分進行含義分析,并對其進行初步翻譯,從而生成中間代碼或目標代碼。具體的任務(wù)主要包括:類型確定、語義檢查、類型檢查、控制流檢查、一致性檢查、相關(guān)名字檢查、作用域分析、識別含義。
語法制導(dǎo)與翻譯模式從概念上進行分析都是在語法分析的基礎(chǔ)上實現(xiàn)語法樹的建立,然后對語法樹進行遍歷,按照一定的語法樹對語義規(guī)則進行計算,生產(chǎn)代碼、檢查符號表、給出錯誤信息等過程實現(xiàn)翻譯動作的完成。因此,語義規(guī)則計算的過程實際上就是輸入源程序串翻譯的過程。在編譯程序的過程中目標代碼屬于最后的階段,是在語義分析或者優(yōu)化中間代碼的基礎(chǔ)上實現(xiàn)的,主要的任務(wù)就是通過中間代碼的輸入生成等價的目標代碼。
5.2 類C編譯器的機器語言
在自定義目標代碼向著機器碼程序進行轉(zhuǎn)換的過程中,需要解決的問題包括:第一,機器碼程序的存儲結(jié)構(gòu);第二,自定義目標代碼相對地址;第三,自定義目標代碼處理;第四,機器碼的輸出。機械碼程序的存儲器中的組成部分包括信息區(qū)、代碼區(qū)及常量字符串區(qū)、數(shù)據(jù)區(qū)等。
6 總結(jié)
當前,“編程原理”課程教學(xué)中采用的教學(xué)語言為PL/O,增加了“編程原理”課程學(xué)習(xí)的難度,降低了學(xué)生學(xué)習(xí)的信心與熱情。本文為了能夠方便學(xué)生的“編程原理”課程學(xué)習(xí),定義了類C教學(xué)語言,這種教學(xué)語言一方面包含了PL/O語言的優(yōu)點,另一方面又規(guī)避了PL/O語言的缺點。通過類C教學(xué)語言的應(yīng)用滿足了“編程原理”課程的需要,降低了“編程原理”課程學(xué)習(xí)的難度,為學(xué)生的“編程原理”課程學(xué)習(xí)提供了便利。
[參考文獻]
[1]王軍民,繆相林,繆亞林,孫超,張詠冬.基于WindowsNT/2000平臺的DDK設(shè)備驅(qū)動軟件的編譯方法[J].計算機工程與設(shè)計.2011,02(32):543-544+547.
[2]劉學(xué)平,李一波,王亞杰,劉成.關(guān)于C程序移植再編譯方法的研究——計算機判閱c程序題的改進方法[J].浙江大學(xué)學(xué)報(工學(xué)版).2013,02(21):74-75.