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-25 21:00 上一頁面

下一頁面
 

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