freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)c語言編譯器的設(shè)計(jì)開發(fā)-字節(jié)代碼格式設(shè)計(jì)與實(shí)現(xiàn)(參考版)

2024-12-05 21:00本頁面
  

【正文】 ? 基。 ? 強(qiáng)調(diào)這些數(shù)據(jù)依賴并且移除其他的控制流依賴產(chǎn)生了一個(gè)粗糙的數(shù)據(jù)依賴圖,它可以通過旁路賦值并 且只保留那些從根可達(dá)的結(jié)點(diǎn)而被簡化。 ? 基本塊的依賴圖由兩種依賴組成:表達(dá)式中通過操作數(shù)的數(shù)據(jù)依賴以及通過變量的數(shù)據(jù)依賴,這些變量的賦值中得到它們的值并且它們的值在且 中被繼續(xù)使用。然后我們重寫依賴圖至代碼。 ? 基本塊的代碼生成分兩步進(jìn)行。 ? 基本塊的概念從對(duì)控制流的關(guān)注中分離出對(duì)表達(dá)式和賦值的整齊序列的代碼生成的關(guān)注?;緣K是從標(biāo)號(hào)或從例程的開頭開始,正好在轉(zhuǎn)移或類轉(zhuǎn)移結(jié)點(diǎn)、標(biāo)號(hào)或例程的結(jié)尾結(jié)束。 ? 如果從活躍分析中得到可用信息,當(dāng)離開其活躍范圍時(shí),我們可以從寄變描述符中刪除關(guān)于變量的所有信息。沒有為結(jié)點(diǎn)生成代碼,但其語義保留在寄變描述 符中:舊寄變描述 +結(jié)點(diǎn) ? 如呆結(jié)點(diǎn)的效果使我們不能精確地在寄變描述符中保留信息,我們生成代碼以獲得效果并且在寄變描述符中記錄結(jié)果。這種表示法被稱為寄變描述符。 ? 棧上的編譯用符號(hào)解釋的編譯有些類似于符號(hào)解釋。啟發(fā)式算法包括先來先服務(wù)、來自程序員的寄存器提示以及從靜態(tài)或動(dòng)態(tài)簡要表得的使用計(jì)數(shù)。通常情況下,每個(gè)集合的大小是固定,并且有些集合可能是空的。變減小了原始樹,我們對(duì)其重復(fù)這個(gè)過程。因此我們求助于啟發(fā)式算法。 ? 當(dāng)一個(gè)表達(dá)式需要的寄存器多于可用的寄存器時(shí),我們需要溢出一個(gè)和多個(gè)寄存 第 22 頁 共 41 頁 器至存儲(chǔ)器。 ? 因?yàn)槊總€(gè)沒有 處理的操作數(shù)都占用了一個(gè)寄存器,為需要最多寄存器的操作數(shù)首先編譯代碼是有利的。 ? 寄存器機(jī)上的表達(dá)式的代碼可以通過深度優(yōu)先遞歸訪問生成,這滿足了指令排序的需要。 ? 寄存器機(jī)的簡單代碼生成用機(jī)器指令重寫每個(gè)表達(dá)式結(jié)點(diǎn),這滿足了代碼選擇的需要。這些翻譯基于共同的接口規(guī)定。 ? 在其他方向,每一個(gè)重復(fù)的代碼段可能在它們的上下文中被部 分求值,從而導(dǎo)致更有效的代碼。 ? 通過將庫例程編號(hào)并且將程序存儲(chǔ)為這些編號(hào)數(shù)的一個(gè)列表可以大大減小目標(biāo)代碼長度。這個(gè)技術(shù)被稱為線程代碼。這個(gè)過程用最小的投入使解釋程序變?yōu)榫幾g程序。 ? 預(yù)處理和后處理可能反復(fù)執(zhí)行 ? 得到代碼 最簡單的方法是為 AST 的每個(gè)結(jié)點(diǎn)生成代碼段,由迭代解釋程序?yàn)槠鋱?zhí)行。有三個(gè)方法簡化代碼生成問: 1每次只考慮 AST 的一小部分; 2 簡化目標(biāo)機(jī); 3限制代碼段之間的接口。 ? 代碼生成中的三個(gè)主要問題是代碼選擇、寄存器分配和指令排序。 ? 替換過程被 稱為樹重寫。 } if(else) Sentence ()。 } Condition_sentence () /*條件語句 */ { 第 21 頁 共 41 頁 if(if){ if(?(?) Expression() 。 } Relation_symbol()。 If(?)‘) Get_next_word()。 } Factor() /*因子 */ { Identifer(); Integer。 Math_ symbol()。 /*算數(shù)運(yùn)算符 */ Item()。 /*關(guān)系運(yùn)算符 */ Expression(); } 第 20 頁 共 41 頁 Circle_sentence() /*循環(huán)語句 */ { for 語句(); while 語句(); dowhile 語句(); } Call_sentence() /*函數(shù)調(diào)用語句 */ { Function_Identifer(); /*函數(shù)名 */ } Expression() /*表達(dá)式 */ { if(+|) Item()。 /*整型常量 */ } Variable() /*變量說明部分 */ { if(類型說明 ) 定義標(biāo)識(shí)符; } Sentence() /*語句 */ { if(!Set_value_sentence()) if(!Condition_sentence()) if(!Circle_sentence()) if(!Call_sentence()) if(!printf) if(!scanf) return Error()。 } Constant() /*常量說明部分 */ { if(const) { Constant_define()?!畼?biāo)識(shí)符 ’ )‘’;‘ 輸出語句 printf‘(?輸出類型聲明 ‘,’ 標(biāo)識(shí)符 ’ )‘’;‘ 輸出類型聲明 %d|%c|%s 表達(dá)式 [+|]項(xiàng) 加減法運(yùn)算符 項(xiàng) 項(xiàng) 因子 乘除法運(yùn)算符 因子 因子 標(biāo)識(shí)符 |無符號(hào)整數(shù) |‘(‘ 表達(dá)式 ’)‘ 加減法運(yùn)算符 +| 乘除法運(yùn)算符 *|/ 關(guān)系運(yùn)算符 ==||=||=|!= 條件語句 if條件 語句 else語句 字母 a|b|?? |A|B|?? |Z 數(shù)字 0|1|?? |9 用 C 語言實(shí)現(xiàn)遞歸下降分析程序如 下 : void Error(){…} main( ) 第 19 頁 共 41 頁 { Constant() 。遞歸下降分析技術(shù)是面 向目標(biāo)的,這個(gè)目標(biāo)是子程序所相應(yīng)的非終結(jié)符號(hào),也是預(yù)測(cè)的,預(yù)言能找到這個(gè)相對(duì)于該非終結(jié)符號(hào)的短語。在遞歸下降識(shí)別程序中的每一個(gè)子程序都對(duì)應(yīng)于文法的一個(gè)非終結(jié)符,更確切地說為各個(gè)非終結(jié)符設(shè)計(jì)一個(gè)子程序,每一個(gè)子程序分析相對(duì)于相應(yīng)非終結(jié)符短語。語法分析設(shè)計(jì)采用遞歸下降分析法,遞歸下降分析技術(shù)是一種無回溯的自頂向下分析 技術(shù),它的實(shí)現(xiàn)思想是:讓一個(gè)識(shí)別符程序由一組子程序組成,其中每一個(gè)子程序?qū)?yīng)于文法的一個(gè)非終結(jié)符;根據(jù)文法的遞歸定義,這些子程序往往是遞歸子程序。 4. 1 系統(tǒng)設(shè)計(jì)總體流程圖 N Y Y N 編譯程序 啟動(dòng)并初始化 調(diào)用 Get_Next_Token()從內(nèi)存中 取單詞 調(diào)用 Programme()過程 當(dāng)前程序是否為結(jié)束符 出錯(cuò)處理 源程序是否有錯(cuò)誤 打印錯(cuò)誤 生成并執(zhí) 行目標(biāo)程序 結(jié)束 調(diào)用 Read_File()把源程序調(diào)入到內(nèi)存 第 17 頁 共 41 頁 語法分析體流程圖 N Y N Y Y N N Y N Y Programme() 調(diào)用主函數(shù)部分Main_Function() Const_Declaration()。因此通常為他們建立不同的符號(hào)表。 語言符號(hào)可分為關(guān)鍵字(保留字)符號(hào),操作符號(hào)幾標(biāo)識(shí)符號(hào)。首先要確定其被分配的區(qū)域。 作為目標(biāo)代碼生成階段地址分配的依據(jù):除語言中規(guī)定的臨時(shí)分配存儲(chǔ)的變量外,每個(gè) 符號(hào)變量在目標(biāo)代碼生成時(shí)需要確定其在存儲(chǔ)分配的位置。 下文語義的合法性檢查的依據(jù):同一個(gè)標(biāo)識(shí)符可能在程序和不同地方出現(xiàn),而有關(guān)該符號(hào)和屬性是在不同情況下收集的,特別是在多趟編譯及程序分段編譯的情況下,更需檢查標(biāo)識(shí)符屬性在上下文中的一致性和全法性。不論 編譯策略是否分趟,符號(hào)表的作用和地位是完全一致的。 在編譯程序中符號(hào)表用來存放語言程序中出現(xiàn)的有關(guān)標(biāo)識(shí)符的屬性信息,這些信息集中反映了標(biāo)識(shí)符的語義特征屬性。首先要確定其被分配的區(qū)域。 作為目標(biāo)代碼生成階段地址分配的依據(jù):除語言中規(guī)定的臨時(shí)分配存儲(chǔ)的變量外,每個(gè)符號(hào)變量在目標(biāo)代碼生成時(shí)需要確定其在存儲(chǔ)分配的位置。 ? 上下文語義的合法性檢查的依據(jù):同一個(gè)標(biāo)識(shí)符可能在程序和不同地方出現(xiàn),而有關(guān)該符號(hào)和屬性是在不同情況下收集的,特別是在多趟編譯及程序分段編譯的情況下,更需檢查標(biāo)識(shí)符屬性在上下文中的一致性和全法性。不論編譯策略是否分趟,符號(hào)表的作用和地位是完全一致的。 3. 7 符號(hào)表的應(yīng)用 在編譯程序中符號(hào)表用來存放語言中出現(xiàn)的有關(guān)標(biāo)識(shí)符的屬性信息,這些信息集中反映了標(biāo)識(shí)符的語義特征屬性。再讀取下一個(gè)單詞繼續(xù)分析。語法分析從讀入第一個(gè)單詞開始,由非終結(jié)符即開始符出發(fā),沿語法描述圖 箭頭指出的方向進(jìn)行分析。編譯器常用的是自頂向下和自底向上的方法。但這種線性掃描則不能用于識(shí)別遞歸定義的語法成分,比如就不能用此辦法去匹配表達(dá)式中的括號(hào)。詞法分 析和語法分析本質(zhì)上都是對(duì)源程序的結(jié)構(gòu)進(jìn)行分析。語法分析所依據(jù)的是語言的語法規(guī)則,即描述程序結(jié)構(gòu)的規(guī)則。語法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列分解成各類語法短語,如“程序”,“語句”,“表達(dá)式”等等。每個(gè)表達(dá)式 r表示一個(gè)語言 L( R) 。這些信息存儲(chǔ)在符號(hào)表中該標(biāo)識(shí)符對(duì) 應(yīng)的表項(xiàng)內(nèi)。記號(hào)影響語法分析,而屬性影響記號(hào)的翻譯。記號(hào)包括:關(guān)鍵字、標(biāo)識(shí)符、操作符、常量、文字串、和標(biāo)點(diǎn)符號(hào)。 3. 識(shí)別標(biāo)識(shí)符和關(guān)鍵字 保留關(guān)鍵字的集合可以通過適當(dāng)?shù)爻跏蓟?hào)表而得到正確的處理。 2. 常數(shù) 在一個(gè)表達(dá)式中,任何一個(gè)允許單個(gè)數(shù)字出現(xiàn)的位置都應(yīng)該允許任何整型常數(shù)出現(xiàn)。許多語言允許“空白符”(空格,制表符或者換行符)出現(xiàn)在記號(hào)之間。 詞法分析器的主要任務(wù)是讀入輸入字符,產(chǎn)生記號(hào)序列,提交給語法分析使用。比如標(biāo)識(shí)是由字母開頭,后跟字母、數(shù)字字符序列組成的一種單詞。這個(gè)階級(jí)的任務(wù)是從左到右一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識(shí)別一個(gè)個(gè)單詞(也稱為單詞符號(hào)或符號(hào))。 語法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列分解成各 類語法短語,如“程序”,“語句”,“表達(dá)式”等等,即判斷單詞序列是否符合組成各類語法短語的組成規(guī)則,一般這種語法短語,也稱為語法單位,可表示成語法樹。 3. 4 詞法語法分析簡介 詞法分析的任務(wù)是從左到右一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識(shí)別出一個(gè)個(gè)的單詞(也稱單詞符號(hào)或符號(hào))。通常有四類維護(hù)活動(dòng):改正性維護(hù),有就是診斷和改正在 使用過程中發(fā)現(xiàn) 第 13 頁 共 41 頁 的軟件錯(cuò)誤;適應(yīng)性維護(hù),即修改軟件以適應(yīng)環(huán)境的變化;完善性維護(hù),即根據(jù)用戶的要求改進(jìn)或擴(kuò)充軟件是它更完善;預(yù)防性維護(hù),即修改軟件為將來的維護(hù)活動(dòng)預(yù)先做準(zhǔn)備。所謂驗(yàn)收測(cè)試是按照規(guī)格說明書的規(guī)定(通常在需求分析階段確定),有用戶(或在用戶的積極參加下)對(duì)目標(biāo)系統(tǒng)進(jìn)行驗(yàn)收。最基本的測(cè)試是集成測(cè)試和驗(yàn)收測(cè)試。程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取一種適當(dāng)?shù)母呒?jí)程序設(shè)計(jì)語言,把詳細(xì)設(shè)計(jì)的結(jié)果翻譯成用選定的語言書寫的程序,并且仔細(xì)測(cè) 試編寫出的每一個(gè)模塊。該階段要產(chǎn)生的文檔有偽代碼、詳細(xì)的測(cè)試計(jì)劃、最終的用戶使用手冊(cè)等。詳細(xì)設(shè)計(jì)階段的 任務(wù)就好似把解決方法具體化,也就是回答下面這個(gè)關(guān)鍵問題:“應(yīng)該怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)呢?”這個(gè)階段的任務(wù)還不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。系統(tǒng)分析員應(yīng)該使用系統(tǒng)流程圖或者其他工具描述每種可能的系統(tǒng)。例如,目標(biāo)系統(tǒng)的一些主要功能是用計(jì)算機(jī)自動(dòng)完成還是用人工完成。該階段有寫的文檔有規(guī)格說明書、初步的用戶使用手冊(cè)、系統(tǒng)功能框架圖等。 ? 需求分析 這個(gè)階段的任務(wù)是“為了解決這個(gè)問題,目標(biāo)系統(tǒng)必須做什么”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能??尚行匝芯侩A段應(yīng)該導(dǎo)出系統(tǒng)的高層邏輯模型(通常用數(shù)據(jù)流圖表示),并且在此基礎(chǔ)上更準(zhǔn)確、更具體地確定工程規(guī)模和目標(biāo)。通過對(duì)實(shí)際用戶和使用部門負(fù)責(zé)人的訪問調(diào)查,分析員扼要地寫出他對(duì)問題的理解,并在用戶和使用部門負(fù)責(zé)人的會(huì)議上認(rèn)真討論這份書面報(bào)告,澄清含糊不清的地方,改正理解不正確的地方,最后得到一份雙方都滿意的文檔。 ( 3) 生命周期的劃分 軟件生命周期一 般分為:軟件定義(問題定義、可行性研究、需求分析)、軟件開發(fā)(總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼和單元測(cè)試、綜合測(cè)試)、軟件維護(hù)等三個(gè)時(shí)期。 軟件工程采用的“生命周期法”,就是從時(shí)間角度對(duì)軟件開發(fā)和維護(hù)的復(fù)雜問題進(jìn)行分解,把軟件生存的漫長周期依次劃分為若干個(gè)階段,每個(gè)階段有相對(duì)獨(dú)立的任務(wù),然后再逐步完成每個(gè)階段的任務(wù)。 積極主動(dòng)采納新的軟件技術(shù),且不斷總結(jié)經(jīng)驗(yàn) 軟件工程的傳統(tǒng)途徑是“生命周期法”,強(qiáng)調(diào)“結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)”。 開發(fā)小組人員數(shù)目的增加,使相互交流復(fù)雜、費(fèi)用增加。 80 年代及之前
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1