• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      C語言編譯器的設(shè)計與實現(xiàn)

      2014-09-30 06:43:24徐冰楠
      關(guān)鍵詞:詞法編譯器語法

      徐冰楠

      (天津工業(yè)大學(xué)計算機科學(xué)與軟件學(xué)院,天津 300387)

      一個編譯程序的重要性體現(xiàn)在它使得多數(shù)計算機用戶不必考慮與機器有關(guān)的繁瑣細節(jié),使程序員和程序設(shè)計專家獨立于機器,這對于當今機器的數(shù)量和種類持續(xù)不斷地增長的年代尤為重要。

      1.研究背景

      C語言是在20世紀70年代初問世的,但目前仍舊沒有一個完整的標準C語言,后由美國國家標準學(xué)會制定了一個C語言標準。C語言屬于一種結(jié)構(gòu)化語言,易于調(diào)試、層次清晰、便于維護,能夠按照模塊化方式組織程序。在實際應(yīng)用中,C語言的處理能力和表現(xiàn)能力極強,既有豐富的數(shù)據(jù)類型和運算符,便于各類復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),又可以實現(xiàn)內(nèi)存物理地址的直接訪問,方便于位一級的操作。在計算機系統(tǒng)中,C語言能夠?qū)崿F(xiàn)對系統(tǒng)硬件的操作,集低級語言與高級語言為一體,同時還可以應(yīng)用于軟件的開發(fā)。另外,C語言還具有較高的可移植性、高效率等優(yōu)點,目前已經(jīng)能夠廣泛應(yīng)用于各型各類的計算機中。

      2.C語言編譯器前端設(shè)計

      編譯是從源代碼到能直接被計算或者虛擬機執(zhí)行的目標代碼的翻譯過程。一般而言,編譯器包含著入口點的地址和名字、及外部調(diào)用機器代碼。編譯器是程序員使用的關(guān)鍵工具,以下針對編譯器的前端設(shè)計進行具體的分析:

      (1)詞法分析。這個階段主要是根據(jù)相應(yīng)的詞法規(guī)則,將源程序中的各個記號一一標記出來,其中,每一個記號所代表著一類的單詞,通常情況下,主要涉及到的記號常見的有標識符、關(guān)鍵字、特殊符號、字面量等等,利用詞法分析器,輸入源程序,輸出識別記號符,最終將字號流轉(zhuǎn)化為相應(yīng)的單詞。

      (2)語法分析。對于語法分析,在實際應(yīng)用時,主要根據(jù)相應(yīng)的語法規(guī)則而將記號中的結(jié)構(gòu)一一標識出,如句子、短語等,并且在此基礎(chǔ)上,構(gòu)造出能夠準確地反映此結(jié)構(gòu)的語法樹。

      (3)語義分析。在這個過程中,主要是根據(jù)語法規(guī)則實施語法單元的靜態(tài)語義檢查,比如轉(zhuǎn)換、類型檢查等,其最為根本的目的就是可以保證其在語法結(jié)構(gòu)上的合法性。

      3.C語言編譯器總體設(shè)計

      在實際工作中,要想完成一個完美的編譯器是一項較為復(fù)雜的事情,要了解語法的構(gòu)成原理,要靈活掌握C語言語法,要考慮到C語言代碼的靈活用法,具體主要從以下幾個階段來完成:

      (1)詞法分析

      在C語言程序中,詞法分析作為編譯的第一個階段,又可以被稱之為掃描器,其最為主要的任務(wù)和目標就是將源程序中的各個字符連接起來,將其中的單詞識別出來,與此同時,還要轉(zhuǎn)換成為相應(yīng)的內(nèi)部編碼,從而更好地應(yīng)用于語法分析。一般情況下,單詞符號的內(nèi)部編碼主要采用二元式來表示,在分析時,主要涉及到的單詞類別有二進制、單詞之值、分隔符、運算符的編碼等,總體上講,在計算機工作時,掃描器主要用于完成以下的目標和任務(wù):將注釋刪除;將源程序中的各個符號和單詞識別出來,轉(zhuǎn)換為相應(yīng)的內(nèi)部編碼形式;將無用的回車字符、空白字符刪除;及時檢查報告中存在的錯誤,及時進行語法檢查。

      另外,針對以上工程流程,在進行一些語法程序詞法分析時,需要登錄識別出的標志符。從工作方式角度來分析,編譯流程與語法屬于兩種接口方式,一種是主要運用詞法分析進行子程序的分析,能夠有效地運用程序進行調(diào)用處理,當需要一個新單詞時,就調(diào)用一次子程序,且在調(diào)用的過程中,還會相應(yīng)地出現(xiàn)一個具有獨立意義的單詞;一種是采用詞法分析對輸出的結(jié)果進行分析,將其放置于中間文件上,同時作為一種輸入進行程序分析。若是從功能上講,主要就是將相應(yīng)的字符源程序進行轉(zhuǎn)換處理,從而變成單詞串的形式。

      (2)語義分析

      將編譯程序轉(zhuǎn)換為一種內(nèi)部表現(xiàn)形式后,我們將該種內(nèi)部表現(xiàn)形式稱之為中間語言或者是中間代碼,它含義明確、結(jié)構(gòu)簡單,屬于一種記號系統(tǒng)。比如一些編譯程序,基本上沒有中間代碼,但是為了在實際應(yīng)用中,確保機器的獨立運行,易于實現(xiàn)目標代碼的優(yōu)化,在許多的編譯程序中均設(shè)置了中間語言。這種中間語言介于機器語言和源程序語言中,程序相對復(fù)雜,而C語言編譯器卻在很大程度上改變以上現(xiàn)狀,其語義分析和語法分析相對成熟,理論和算法比較完善,可仍舊存在的問題是沒有公認的形式系統(tǒng),中間代碼仍舊接近于形式化的方法。

      (3)語法分析

      語法分析主要是以單詞串形式的源程序作為分析與輸入對象,其最為根本的目標和任務(wù)就是為了以設(shè)計語言的語法規(guī)則為標準,對源程序的語法結(jié)構(gòu)進行具體的分析,根據(jù)設(shè)計語言的語法規(guī)則,對組成這些源程序的語法成分進行分析,如函數(shù)、下標變量、各種程序語句、各種表達式等等,并且要通過正確性的語法檢查,將中間代碼進行階段處理。當前對于語法的分析主要包括兩大類:一類是自頂向下,一種是自底向上。

      ①自頂向下

      在這里試圖設(shè)定一個輸入串,從文法進行處理,構(gòu)成一棵語法樹,自下而下進行構(gòu)造,若是成功,則文法可以成句;若是沒有成功,則不能成句。與此同時,進行語法分析,通常還需要解決相關(guān)的障礙問題,具體主要體現(xiàn)在以下方面:一是采用最左推導(dǎo)處理,確保方法中非終結(jié)符號的傳遞,避免語法進入循環(huán)狀態(tài);二是對符號串進行配置處理,本質(zhì)上講,文法所產(chǎn)生的選式屬于一個不斷試控的過程,因此,必然會出現(xiàn)回溯問題,為此就會導(dǎo)致分析效率下降。因此,為了實現(xiàn)語法分析,則要對程序設(shè)計語言及其相關(guān)的文法進行分析,從而有效地消除回溯和遞歸現(xiàn)象。

      ②自底向上

      對于這種形式的語法分析,同樣需要給定相應(yīng)的輸入串,運用相應(yīng)的文法進行處理,采用歸約法試圖去構(gòu)成語法樹,一般情況主要采用最左歸納法進行處理,以實現(xiàn)自底向上的分析,將輸入符號進行逐個的推入處理,并對相應(yīng)的產(chǎn)生式左部進行替換處理,以有效地完成一次歸約,但是在歸約時,為了得到更好的頂,則要對形成的新的句柄進行處理,反之,若是處理不達標,那么則要重復(fù)上述過程,從而完成最終的歸約。但是要注意的一點是根據(jù)需要進行了歸約處理,必然存在著相應(yīng)語法錯誤,那么可以將其中全部輸入的符號刪除,改變上述格局,進行移進和歸約分析,并且在此基礎(chǔ)上,不斷地尋找一個相應(yīng)的策略,從而形成有效的語法分析方法。

      (4)類型檢查

      所謂類型檢查,就是通過給源程序設(shè)定一個表達式,根據(jù)類型表達式設(shè)置一組相應(yīng)的規(guī)則,將其作為源語言的系統(tǒng)。類型檢查的功能和任務(wù)就是能夠準確地發(fā)現(xiàn)程序中的錯誤功能,如果目標代碼既可以保持原有的元素類型,同時也可對元素值進行動態(tài)檢查,更為重要的是可以避免源程序靜態(tài)錯誤的發(fā)生。

      4.功能的實現(xiàn)

      基于C語言編譯器的開發(fā)在可行性分析的基礎(chǔ)上,進行深入、全面的分析,為此,在這里對C語言的運行情況和編譯原理進行具體的分析,具體的功能流程圖如圖1所示:

      圖1 C語言編譯器流程圖

      整個C語言框架可以說是整個編譯器的前端核心,也是整個前端的入口點,因此,對于本身的不主動符號,所有動作均借助于Visual C++6.0,將其作為一個信息相互交互的過程,比如在編譯時,Visual C++6.0的功能不能滿足要求,可以對Visual Studio的開發(fā)環(huán)境進行具體的分析,并且結(jié)合目前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境,對集成開發(fā)環(huán)境(IDE)的界面進行重新設(shè)計和組織,使得整個編譯器的過程變得更加簡單明了。與此同時,對于信息的處理和包裝,還可以應(yīng)用Visual Studio 2010、NET Framework 4.0、Microsoft Visual Studio 2010 CTP(Community Technology Preview--CTP)提供一個相應(yīng)的規(guī)約式,以支持開發(fā)面向Windows的應(yīng)用程序,其大致的過程包括符號信息的處理、編譯器的具體動作、信息代碼的提供等,結(jié)合Microsoft SQL Server、IBM DB2和Oracle數(shù)據(jù)庫,以完成更高層的數(shù)據(jù)處理與包裝,以下通過具體的事例來說明規(guī)約式動作的信息提?。?/p>

      改程序改對后運行結(jié)果是327893.2789e+006A,改完后的代碼:

      通過以上編譯,以實現(xiàn)一個符號項,加上每一個符號項各不相同,既可以保證類型的相同,又可以保證信息類別的多樣化,最后通過與框架進行整合處理,以提供必要的機制,將其中的字符流轉(zhuǎn)換成為內(nèi)部代碼,排除符號代碼外,將其本身所攜帶的信息進行封裝,并與特定的結(jié)構(gòu)同符號一起返回處理。

      5.結(jié)束語

      整個C語言編譯器涉及到的主要工作是程序的運行以及支持設(shè)計,要針對數(shù)據(jù)流和控制流進行優(yōu)化分析,將基于中間代碼的數(shù)據(jù)流結(jié)果和控制流結(jié)果進行科學(xué)處理,確保最后目標的生成。與此同時,整個設(shè)計過程中,框架作為運行支持的亮點環(huán)節(jié),由于缺乏統(tǒng)一的標準,還需要針對特定的架構(gòu)設(shè)計,設(shè)計出一種程序調(diào)度開銷小、語言特點簡潔、代碼生成方便的運行環(huán)境給予支持。

      [1]李松樹,姚益平,周家和.YH-2C語言優(yōu)化編譯器的設(shè)計[J].計算機工程與科學(xué),2011,(04):70-74.

      [2]高陶.面向測控系統(tǒng)的MCL語言編譯器設(shè)計[D].電子科技大學(xué),2009.

      [3]吳江.SQL語言預(yù)編譯器的構(gòu)架——基于Linux操作系統(tǒng)[D].北京化工大學(xué),2012.

      [4]王昭順,楊樹森,李周芳.嵌入式C02語言編譯器的設(shè)計與實現(xiàn)[J].計算機應(yīng)用研究,2011,(07):96-98.

      [5]甄真.面向列數(shù)據(jù)庫的SQL語言編譯器設(shè)計與優(yōu)化[D].華南理工大學(xué),2012.

      [6]姜娜,孔浩.一種支持軟件演化過程描述語言的編譯器的設(shè)計分析[J].綿陽師范學(xué)院學(xué)報,2013,(02):99-102.

      [7]李穎,胡明.基于C語言實現(xiàn)的IDL編譯器[J].計算機技術(shù)與發(fā)展,2013,(03):5-9.

      [8]鄭陽,付麗君,黃志鋼.用于PLC的華P語言編譯器設(shè)計與實現(xiàn)[J].沈陽理工大學(xué)學(xué)報,2009,(05):30-33.

      [9]王暉,胡寶成,何華燦,王忠,沈緒榜.LSMPP數(shù)據(jù)并行C語言編譯器實現(xiàn)的研究[J].微電子學(xué)與計算機,2010,(06):1-5.

      [10]史巖,李蜀瑜,丘征,陳長勝.CoSy C語言編譯器程序緩沖區(qū)溢出研究[J].計算機技術(shù)與發(fā)展,2012,(06):93-96.

      猜你喜歡
      詞法編譯器語法
      詞法 名詞、代詞和冠詞
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設(shè)計
      跟蹤導(dǎo)練(二)4
      KEYS
      Keys
      Book 5 Unit 1~Unit 3語法鞏固練習(xí)
      應(yīng)用于詞法分析器的算法分析優(yōu)化
      談對外漢語“詞法詞”教學(xué)
      通用NC代碼編譯器的設(shè)計與實現(xiàn)
      2010年高考英語“相似”考題例析
      石首市| 广元市| 黄骅市| 龙井市| 凌源市| 开封市| 中方县| 宜兰县| 屏东县| 乡宁县| 梨树县| 霍州市| 凉山| 永靖县| 长武县| 锡林郭勒盟| 如皋市| 淮安市| 天门市| 丹江口市| 铁岭县| 永城市| 泰州市| 朔州市| 朝阳区| 洛隆县| 汕尾市| 邵东县| 沈阳市| 乌恰县| 绿春县| 山东省| 抚远县| 伽师县| 盐山县| 宁波市| 中卫市| 濉溪县| 普兰县| 武乡县| 东安县|