首頁(yè)考試吧論壇Exam8視線考試商城網(wǎng)絡(luò)課程模擬考試考友錄實(shí)用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓(xùn) 自學(xué)考試 成人高考
四 六 級(jí)
GRE考試
攻碩英語(yǔ)
零起點(diǎn)日語(yǔ)
職稱英語(yǔ)
口譯筆譯
申碩英語(yǔ)
零起點(diǎn)韓語(yǔ)
商務(wù)英語(yǔ)
日語(yǔ)等級(jí)
GMAT考試
公共英語(yǔ)
職稱日語(yǔ)
新概念英語(yǔ)
專四專八
博思考試
零起點(diǎn)英語(yǔ)
托福考試
托業(yè)考試
零起點(diǎn)法語(yǔ)
雅思考試
成人英語(yǔ)三級(jí)
零起點(diǎn)德語(yǔ)
等級(jí)考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會(huì)工作者
銀行從業(yè)
教師資格
營(yíng)養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國(guó)際商務(wù)
心理咨詢
營(yíng) 銷 師
司法考試
國(guó)際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會(huì)計(jì)職稱
法律顧問
ACCA考試
注冊(cè)會(huì)計(jì)師
資產(chǎn)評(píng)估師
審計(jì)師考試
高級(jí)會(huì)計(jì)師
注冊(cè)稅務(wù)師
國(guó)際內(nèi)審師
理財(cái)規(guī)劃師
美國(guó)注冊(cè)會(huì)計(jì)師
一級(jí)建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級(jí)建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊(cè)測(cè)繪師
質(zhì)量工程師
巖土工程師
造價(jià)員考試
注冊(cè)計(jì)量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評(píng)價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評(píng)價(jià)師
土地登記代理人
繽紛校園 實(shí)用文檔 英語(yǔ)學(xué)習(xí) 作文大全 求職招聘 論文下載 訪談|游戲
軟件水平考試
軟件水平考試資訊
軟件水平考試試題
軟件水平考試專項(xiàng)輔導(dǎo)
軟件水平考試交流互動(dòng)
軟件水平考試交流互動(dòng)
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 系統(tǒng)分析師 > 正文

2012年軟考系統(tǒng)分析師經(jīng)典教程:編譯程序

  2.4 編譯程序

  把用高級(jí)程序設(shè)計(jì)語(yǔ)言書寫的源程序,翻譯成等價(jià)的計(jì)算機(jī)匯編語(yǔ)言或機(jī)器語(yǔ)言書寫的目標(biāo)程序的翻譯程序。編譯程序?qū)儆诓捎蒙尚詫?shí)現(xiàn)途徑實(shí)現(xiàn)的翻譯程序。它以高級(jí)程序設(shè)計(jì)語(yǔ)言書寫的源程序作為輸入,而以匯編語(yǔ)言或機(jī)器語(yǔ)言表示的目標(biāo)程序作為輸出。編譯出的目標(biāo)程序通常還要經(jīng)歷運(yùn)行階段,以便在運(yùn)行程序的支持下運(yùn)行,加工初始數(shù)據(jù),算出所需的計(jì)算結(jié)果。編譯程序的實(shí)現(xiàn)算法較為復(fù)雜。這是因?yàn)樗g的語(yǔ)句與目標(biāo)語(yǔ)言的指令不是一一對(duì)應(yīng)關(guān)系,而是一多對(duì)應(yīng)關(guān)系;同時(shí)也因?yàn)樗幚磉f歸調(diào)用、動(dòng)態(tài)存儲(chǔ)分配、多種數(shù)據(jù)類型,以及語(yǔ)句間的緊密依賴關(guān)系。但是,由于高級(jí)程序設(shè)計(jì)語(yǔ)言書寫的程序具有易讀、易移植和表達(dá)能力強(qiáng)等特點(diǎn),編譯程序廣泛地用于翻譯規(guī)模較大、復(fù)雜性較高、且需要高效運(yùn)行的高級(jí)語(yǔ)言書寫的源程序。

  功能

  編譯程序的基本功能是把源程序翻譯成目標(biāo)程序。但是,作為一個(gè)具有實(shí)際應(yīng)用價(jià)值的編譯系統(tǒng),除了基本功能之外,還應(yīng)具備語(yǔ)法檢查、調(diào)試措施、修改手段、覆蓋處理、目標(biāo)程序優(yōu)化、不同語(yǔ)言合用以及人-機(jī)聯(lián)系等重要功能。

  ①語(yǔ)法檢查:檢查源程序是否合乎語(yǔ)法。如果不符合語(yǔ)法,編譯程序要指出語(yǔ)法錯(cuò)誤的部位、性質(zhì)和有關(guān)信息。編譯程序應(yīng)使用戶一次上機(jī),能夠盡可能多地查出錯(cuò)誤。

 、谡{(diào)試措施:檢查源程序是否合乎設(shè)計(jì)者的意圖。為此,要求編譯程序在編譯出的目標(biāo)程序中安置一些輸出指令編譯程序,以便在目標(biāo)程序運(yùn)行時(shí)能輸出程序動(dòng)態(tài)執(zhí)行情況的信息,如變量值的更改、程序執(zhí)行時(shí)所經(jīng)歷的線路等。這些信息有助于用戶核實(shí)和驗(yàn)證源程序是否表達(dá)了算法要求。

 、坌薷氖侄危簽橛脩籼峁┖(jiǎn)便的修改源程序的手段。編譯程序通常要提供批量修改手段(用于修改數(shù)量較大或臨時(shí)不易修改的錯(cuò)誤)和現(xiàn)場(chǎng)修改手段(用于運(yùn)行時(shí)修改數(shù)量較少、臨時(shí)易改的錯(cuò)誤)。

 、芨采w處理:主要是為處理程序長(zhǎng)、數(shù)據(jù)量大的大型問題程序而設(shè)置的。基本思想是讓一些程序段和數(shù)據(jù)公用某些存儲(chǔ)區(qū),其中只存放當(dāng)前要用的程序或數(shù)據(jù);其余暫時(shí)不用的程序和數(shù)據(jù),先存放在磁盤等輔助存儲(chǔ)器中,待需要時(shí)動(dòng)態(tài)地調(diào)入。

  ⑤目標(biāo)程序優(yōu)化:提高目標(biāo)程序的質(zhì)量,即占用的存儲(chǔ)空間少,程序的運(yùn)行時(shí)間短。依據(jù)優(yōu)化目標(biāo)的不同,編譯程序可選擇實(shí)現(xiàn)表達(dá)式優(yōu)化、循環(huán)優(yōu)化或程序全局優(yōu)化。目標(biāo)程序優(yōu)化有的在源程序級(jí)上進(jìn)行,有的在目標(biāo)程序級(jí)上進(jìn)行。

  ⑥不同語(yǔ)言合用:其功能有助于用戶利用多種程序設(shè)計(jì)語(yǔ)言編寫應(yīng)用程序或套用已有的不同語(yǔ)言書寫的程序模塊。最為常見的是高級(jí)語(yǔ)言和匯編語(yǔ)言的合用。這不但可以彌補(bǔ)高級(jí)語(yǔ)言難于表達(dá)某些非數(shù)值加工操作或直接控制、訪問外圍設(shè)備和硬件寄存器之不足,而且還有利于用匯編語(yǔ)言編寫核心部分程序,以提高運(yùn)行效率。

 、呷-機(jī)聯(lián)系:確定編譯程序?qū)崿F(xiàn)方案時(shí)達(dá)到精心設(shè)計(jì)的功能。目的是便于用戶在編譯和運(yùn)行階段及時(shí)了解內(nèi)部工作情況,有效地監(jiān)督、控制系統(tǒng)的運(yùn)行。

  早期編譯程序的實(shí)現(xiàn)方案,是把上述各項(xiàng)功能完全收納在編譯程序之中。然而,習(xí)慣做法是在操作系統(tǒng)的支持下,配置調(diào)試程序、編輯程序和連接裝配程序,用以協(xié)助實(shí)現(xiàn)程序的調(diào)試、修改、覆蓋處理,以及不同語(yǔ)言合用功能。但在設(shè)計(jì)編譯程序時(shí),仍須精心考慮如何與這些子系統(tǒng)銜接等問題。

  工作過程

  編譯程序必須分析源程序,然后綜合成目標(biāo)程序。首先,檢查源程序的正確性,并把它分解成若干基本成分;其次,再根據(jù)這些基本成分建立相應(yīng)等價(jià)的目標(biāo)程序部分。為了完成這些工作,編譯程序要在分析階段建立一些表格,改造源程序?yàn)橹虚g語(yǔ)言形式,以便在分析和綜合時(shí)易于引用和加工。

  數(shù)據(jù)結(jié)構(gòu) 分析和綜合時(shí)所用的主要數(shù)據(jù)結(jié)構(gòu),包括符號(hào)表、常數(shù)表和中間語(yǔ)言程序。符號(hào)表由源程序中所用的標(biāo)識(shí)符連同它們的屬性組成,其中屬性包括種類(如變量、數(shù)組、結(jié)構(gòu)、函數(shù)、過程等)、類型(如整型、實(shí)型、字符串、復(fù)型、標(biāo)號(hào)等),以及目標(biāo)程序所需的其他信息。常數(shù)表由源程序中用的常數(shù)組成,其中包括常數(shù)的機(jī)內(nèi)表示,以及分配給它們的目標(biāo)程序地址。中間語(yǔ)言程序是將源程序翻譯為目標(biāo)程序前引入的一種中間形式的程序,其表示形式的選擇取決于編譯程序以后如何使用和加工它。常用的中間語(yǔ)言形式有波蘭表示、三元組、四元組以及間接三元組等。

  分析部分 源程序的分析是經(jīng)過詞法分析、語(yǔ)法分析和語(yǔ)義分析三個(gè)步驟實(shí)現(xiàn)的。詞法分析由詞法分析程序(又稱為掃描程序)完成,其任務(wù)是識(shí)別單詞(即標(biāo)識(shí)符、常數(shù)、保留字,以及各種運(yùn)算符、標(biāo)點(diǎn)符號(hào)等)、造符號(hào)表和常數(shù)表,以及將源程序換碼為編譯程序易于分析和加工的內(nèi)部形式。語(yǔ)法分析程序是編譯程序的核心部分,其主要任務(wù)是根據(jù)語(yǔ)言的語(yǔ)法規(guī)則,檢查源程序是否合乎語(yǔ)法。如不合乎語(yǔ)法,則輸出語(yǔ)法出錯(cuò)信息;如合乎語(yǔ)法,則分解源程序的語(yǔ)法結(jié)構(gòu),構(gòu)造中間語(yǔ)言形式的內(nèi)部程序。語(yǔ)法分析的目的是掌握單詞是怎樣組成語(yǔ)句的,以及語(yǔ)句又是如何組成程序的。語(yǔ)義分析程序是進(jìn)一步檢查合法程序結(jié)構(gòu)的語(yǔ)義正確性,其目的是保證標(biāo)識(shí)符和常數(shù)的正確使用,把必要的信息收集和保存到符號(hào)表或中間語(yǔ)言程序中,并進(jìn)行相應(yīng)的語(yǔ)義處理。

  編譯程序的功能是把某些高級(jí)語(yǔ)言書寫的源程序翻譯成與之等價(jià)的低級(jí)語(yǔ)言(匯編語(yǔ)言或者機(jī)器語(yǔ)言)的目標(biāo)程序。其過程可以分成6個(gè)階段。

 過程階段

任務(wù)及其特點(diǎn)

詞法分析階段

該階段的任務(wù)是從左到右逐個(gè)字符的讀入源程序,識(shí)別出一個(gè)個(gè)的單詞符號(hào)。 
詞法分析所依據(jù)的是語(yǔ)言的詞法規(guī)則,即描述單詞結(jié)構(gòu)的規(guī)則。詞法規(guī)則可用3型文法(正規(guī)文法)或正規(guī)式來描述,有限自動(dòng)機(jī)能識(shí)別正規(guī)文法所定義的語(yǔ)言和正規(guī)式所表示的集合。

語(yǔ)法分析階段

該階段任務(wù)是在詞法分析的基礎(chǔ)上將單詞符號(hào)序列分解成各類語(yǔ)法單元。
語(yǔ)法分析所依據(jù)的是語(yǔ)言的語(yǔ)法規(guī)則,即描述程序結(jié)構(gòu)的規(guī)則。語(yǔ)法分析有自頂向下分析(遞歸子程序分析法LL1)和自底向上分析(LR和算符優(yōu)先分析)兩大類。

語(yǔ)義分析階段

審查源程序有無語(yǔ)義錯(cuò)誤,為代碼生成階段收集類型信息。

中間代碼生成階段

在進(jìn)行了上述的語(yǔ)法分析和語(yǔ)義分析階段的工作之后,有的編譯程序?qū)⒃闯绦蜃兂梢环N內(nèi)部表示形式,這種內(nèi)部表示形式叫做中間語(yǔ)言或中間代碼。所謂“中間代碼”是一種簡(jiǎn)單、含義明確的記號(hào)系統(tǒng)。

代碼優(yōu)化階段

該階段是對(duì)前階段產(chǎn)生的中間代碼進(jìn)行變換改造,目的是使生成的目標(biāo)代碼更為高級(jí),即省時(shí)間和省空間。優(yōu)化所依據(jù)的原則是程序的等價(jià)變換規(guī)則。

目標(biāo)代碼生成階段

此階段使把中間代碼變換成特定機(jī)器上的絕對(duì)指令代碼或可重定位的指令代碼或匯編指令代碼。

  其中,詞法分析和語(yǔ)法分析本質(zhì)上都是對(duì)源程序的結(jié)構(gòu)進(jìn)行分析。而語(yǔ)義分析和中間代碼生成所依據(jù)的是語(yǔ)言的語(yǔ)義規(guī)則,一般采用語(yǔ)法指導(dǎo)翻譯和中間代碼生成。

  自底向上分析法采用一個(gè)后進(jìn)先出棧的數(shù)據(jù)結(jié)構(gòu),是移進(jìn)-規(guī)約過程(找出句柄)。

  自頂向下分析法必須改寫文法,采用預(yù)測(cè)分析法,要消除左遞歸和提取公共左因子。

  編譯過程6個(gè)階段的任務(wù)以及表格管理和出錯(cuò)處理工作可分別由幾個(gè)模塊或程序完成,他們分別稱作詞法分析程序、語(yǔ)法分析程序、語(yǔ)義分析程序,中間代碼生成程序、代碼優(yōu)化程序、目標(biāo)代碼生成程序、表格管理程序和出錯(cuò)處理程序。

  相關(guān)推薦:

  2012年軟考系統(tǒng)分析師考試60天完美復(fù)習(xí)計(jì)劃

  2012年軟件水平考試網(wǎng)絡(luò)工程師章節(jié)筆記講義匯總

  2012年上半年軟件水平考試成績(jī)查詢匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。