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

正文內(nèi)容

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

2025-01-10 21:00上一頁面

下一頁面
  

【正文】 是字母 (A~ Z, a~ z)、數(shù)字 (0~9)、下劃線 (_)組成的字符串,并且其第一個字符必須是字母或下劃線。用戶定義的標(biāo)識符不應(yīng)與關(guān)鍵字相同。運算符由一個或多個字符組成。在后面章節(jié)中將專門給予介紹。 自從 1968 年在聯(lián)邦德國召開的國際會議上正式提出并使用了“軟件工程”這個術(shù)語以來,研究軟件工程 的專家學(xué)者們陸續(xù)提出了 100 多條關(guān)于軟件工程的準(zhǔn)則或“信條”。 對涉及基準(zhǔn)配置的修改,必須經(jīng)過嚴(yán)格的評審,通過后才能實施修改。 軟件工程采用的“生命周期法”,就是從時間角度對軟件開發(fā)和維護(hù)的復(fù)雜問題進(jìn)行分解,把軟件生存的漫長周期依次劃分為若干個階段,每個階段有相對獨立的任務(wù),然后再逐步完成每個階段的任務(wù)。 ? 需求分析 這個階段的任務(wù)是“為了解決這個問題,目標(biāo)系統(tǒng)必須做什么”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能。詳細(xì)設(shè)計階段的 任務(wù)就好似把解決方法具體化,也就是回答下面這個關(guān)鍵問題:“應(yīng)該怎樣具體地實現(xiàn)這個系統(tǒng)呢?”這個階段的任務(wù)還不是編寫程序,而是設(shè)計出程序的詳細(xì)規(guī)格說明。所謂驗收測試是按照規(guī)格說明書的規(guī)定(通常在需求分析階段確定),有用戶(或在用戶的積極參加下)對目標(biāo)系統(tǒng)進(jìn)行驗收。這個階級的任務(wù)是從左到右一個字符一個字符地讀入源程序,對構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識別一個個單詞(也稱為單詞符號或符號)。 2. 常數(shù) 在一個表達(dá)式中,任何一個允許單個數(shù)字出現(xiàn)的位置都應(yīng)該允許任何整型常數(shù)出現(xiàn)。這些信息存儲在符號表中該標(biāo)識符對 應(yīng)的表項內(nèi)。詞法分 析和語法分析本質(zhì)上都是對源程序的結(jié)構(gòu)進(jìn)行分析。再讀取下一個單詞繼續(xù)分析。 作為目標(biāo)代碼生成階段地址分配的依據(jù):除語言中規(guī)定的臨時分配存儲的變量外,每個符號變量在目標(biāo)代碼生成時需要確定其在存儲分配的位置。 下文語義的合法性檢查的依據(jù):同一個標(biāo)識符可能在程序和不同地方出現(xiàn),而有關(guān)該符號和屬性是在不同情況下收集的,特別是在多趟編譯及程序分段編譯的情況下,更需檢查標(biāo)識符屬性在上下文中的一致性和全法性。因此通常為他們建立不同的符號表。遞歸下降分析技術(shù)是面 向目標(biāo)的,這個目標(biāo)是子程序所相應(yīng)的非終結(jié)符號,也是預(yù)測的,預(yù)言能找到這個相對于該非終結(jié)符號的短語。 /*關(guān)系運算符 */ Expression(); } 第 20 頁 共 41 頁 Circle_sentence() /*循環(huán)語句 */ { for 語句(); while 語句(); dowhile 語句(); } Call_sentence() /*函數(shù)調(diào)用語句 */ { Function_Identifer(); /*函數(shù)名 */ } Expression() /*表達(dá)式 */ { if(+|) Item()。 If(?)‘) Get_next_word()。 ? 替換過程被 稱為樹重寫。這個過程用最小的投入使解釋程序變?yōu)榫幾g程序。這些翻譯基于共同的接口規(guī)定。 ? 當(dāng)一個表達(dá)式需要的寄存器多于可用的寄存器時,我們需要溢出一個和多個寄存 第 22 頁 共 41 頁 器至存儲器。啟發(fā)式算法包括先來先服務(wù)、來自程序員的寄存器提示以及從靜態(tài)或動態(tài)簡要表得的使用計數(shù)。 ? 如果從活躍分析中得到可用信息,當(dāng)離開其活躍范圍時,我們可以從寄變描述符中刪除關(guān)于變量的所有信息。然后我們重寫依賴圖至代碼。 ? 基。 ? 基本塊的代碼生成分兩步進(jìn)行。沒有為結(jié)點生成代碼,但其語義保留在寄變描述 符中:舊寄變描述 +結(jié)點 ? 如呆結(jié)點的效果使我們不能精確地在寄變描述符中保留信息,我們生成代碼以獲得效果并且在寄變描述符中記錄結(jié)果。通常情況下,每個集合的大小是固定,并且有些集合可能是空的。 ? 因為每個沒有 處理的操作數(shù)都占用了一個寄存器,為需要最多寄存器的操作數(shù)首先編譯代碼是有利的。 ? 在其他方向,每一個重復(fù)的代碼段可能在它們的上下文中被部 分求值,從而導(dǎo)致更有效的代碼。 ? 預(yù)處理和后處理可能反復(fù)執(zhí)行 ? 得到代碼 最簡單的方法是為 AST 的每個結(jié)點生成代碼段,由迭代解釋程序為其執(zhí)行。 } if(else) Sentence ()。 } Factor() /*因子 */ { Identifer(); Integer。 /*整型常量 */ } Variable() /*變量說明部分 */ { if(類型說明 ) 定義標(biāo)識符; } Sentence() /*語句 */ { if(!Set_value_sentence()) if(!Condition_sentence()) if(!Circle_sentence()) if(!Call_sentence()) if(!printf) if(!scanf) return Error()。在遞歸下降識別程序中的每一個子程序都對應(yīng)于文法的一個非終結(jié)符,更確切地說為各個非終結(jié)符設(shè)計一個子程序,每一個子程序分析相對于相應(yīng)非終結(jié)符短語。 語言符號可分為關(guān)鍵字(保留字)符號,操作符號幾標(biāo)識符號。不論 編譯策略是否分趟,符號表的作用和地位是完全一致的。 ? 上下文語義的合法性檢查的依據(jù):同一個標(biāo)識符可能在程序和不同地方出現(xiàn),而有關(guān)該符號和屬性是在不同情況下收集的,特別是在多趟編譯及程序分段編譯的情況下,更需檢查標(biāo)識符屬性在上下文中的一致性和全法性。語法分析從讀入第一個單詞開始,由非終結(jié)符即開始符出發(fā),沿語法描述圖 箭頭指出的方向進(jìn)行分析。語法分析所依據(jù)的是語言的語法規(guī)則,即描述程序結(jié)構(gòu)的規(guī)則。記號影響語法分析,而屬性影響記號的翻譯。許多語言允許“空白符”(空格,制表符或者換行符)出現(xiàn)在記號之間。 語法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列分解成各 類語法短語,如“程序”,“語句”,“表達(dá)式”等等,即判斷單詞序列是否符合組成各類語法短語的組成規(guī)則,一般這種語法短語,也稱為語法單位,可表示成語法樹。最基本的測試是集成測試和驗收測試。系統(tǒng)分析員應(yīng)該使用系統(tǒng)流程圖或者其他工具描述每種可能的系統(tǒng)??尚行匝芯侩A段應(yīng)該導(dǎo)出系統(tǒng)的高層邏輯模型(通常用數(shù)據(jù)流圖表示),并且在此基礎(chǔ)上更準(zhǔn)確、更具體地確定工程規(guī)模和目標(biāo)。 積極主動采納新的軟件技術(shù),且不斷總結(jié)經(jīng)驗 軟件工程的傳統(tǒng)途徑是“生命周期法”,強調(diào)“結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計”。 因此,在每個階段都進(jìn)行嚴(yán)格的評審,以便盡早發(fā)現(xiàn)在軟件開發(fā)過程的錯誤 ? 實行嚴(yán)格的產(chǎn)品控制 在軟件開發(fā)過程中不要隨意改變需求,因為改變某項需求往往需要付出 較高的代價,但在實踐中用戶往往會提出需求變更,因此需要采取科學(xué)的產(chǎn)品控制技術(shù)。在調(diào)試程序中對暫不使用的語句也可用注釋符括起來,使翻譯跳過不作處理,待調(diào)試結(jié)束后再去掉注釋符。C 編譯器會把 inta 當(dāng)成一個標(biāo)識符處理,其結(jié)果必然出錯。 C語言中含有相當(dāng)豐富的運算符。因此,命名應(yīng)盡量有相應(yīng)的意義,以便于閱讀理解,作到“顧名思義”。 在程序中使用的變量名、函數(shù)名、標(biāo)號等統(tǒng)稱為標(biāo)識符。 C 語言的字符集: 字符是組成語言的最基本的元素。 6 C 把括號、賦值、逗號等都作為運算符處理。T C 這些C語言版本不僅實現(xiàn)了 ANSI C 標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴充,使之更加方便、完美。R》中并沒有定義一個完整的標(biāo)準(zhǔn) C 語言,后來由美國國家標(biāo)準(zhǔn)協(xié)會( American National Standards Institute)在此基礎(chǔ)上制定了一個 C 語言標(biāo)準(zhǔn),于一九八三年發(fā)表。 3. 2 C 語言簡介 C語言是在 70 年代初問世的。每一遍掃視可完成上述一個階段或多個階段的工作。這是編譯的最后階級,它的工作與硬件系統(tǒng)結(jié)構(gòu)和指令含義有關(guān),這個階的工作很復(fù)雜,涉及到硬件系統(tǒng)功能部件的運用、機器指令的選擇 、各種數(shù)據(jù)類型變量的存儲空間分配以及寄存器和后緩寄存器的調(diào)度等。比如語分析的一個工 作是進(jìn)行類型審查,審查每個算符是否具有語言規(guī)范允許的運算對象,當(dāng)不符合語言規(guī)范時,編譯程序應(yīng)報告錯誤。語法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列分解成各類語法短語,如“程序”,“語句”,“表達(dá)式”等等。另外兩個重要的工作:表格處理和出錯處理與上述六個階級都有聯(lián)系。如果源語言是像 FORTRAN, PASCAL,或 C 那樣的高級語言,目標(biāo)語言是像匯編語言或機器語言那樣的低級玉器言,則這種翻譯程序稱作編譯程序。在控制流構(gòu)造上,目標(biāo)代碼使用轉(zhuǎn)移語句而不是 if和 while 語句。即用戶自己必須知道程序各模塊之間邏輯結(jié)構(gòu)關(guān)系及調(diào)用關(guān)系乃至運算量,以確定哪些模塊可以并行執(zhí)行。目前,很多自動生成的 工具已廣泛使用,如詞法分析的生成系統(tǒng) LEX,語法分析程序的生成系統(tǒng) YACC 等。從表面上看,編譯器的種類似乎千變?nèi)f化,多種多樣,實質(zhì)上任何編譯器所要完成的基本任務(wù)都是相同的。下邊是這類工具的示例: 1. 結(jié)構(gòu)編輯器,結(jié)構(gòu)編輯器將一個命令序列作為輸入一構(gòu)造程序。幸運的是,有幾種基本編譯器編寫技術(shù)已經(jīng)被用于構(gòu)建許多計算機的多種語言翻譯器。匯編器、鏈接器和裝入器可由操心系統(tǒng)提供或由編譯器自帶。自頂向下的分析程序有兩類:回溯分析程序和預(yù)測分析程序。編譯器常用的是自頂向下和自底向上的方法。保留字是一種單詞,此外還有算符,界符等等。 一個編譯程序的重要性體現(xiàn)在它使得多數(shù)計算機用戶不必考慮與機器有關(guān)的繁索細(xì)節(jié),使程序員和程序設(shè)計專家獨立于機器,這對于當(dāng)今機器的數(shù)量和種類持續(xù)不斷地增長的年代憂為重要。它把一種語(稱作源語言)書寫的程序翻譯成另一種語言(稱作目標(biāo)語言)的等價的程序。在翻譯期間,中間表示或 IR 代表了源程序和數(shù)據(jù)結(jié)構(gòu)。 目前,世界上存在著數(shù)千種源語言,既有 Fortran 和 Pascal 這樣的傳統(tǒng)程序設(shè)計語言,也有各計算機應(yīng)用領(lǐng)域中出現(xiàn)的專用語言。如果源語言是像 FORTRAN, PASCAL,或 C 那樣的高級語言,目標(biāo)語言是像匯編語言或機器語言那樣的低級機器語言,則這種翻譯程序稱作編譯程序。比如匯編程序是一個翻譯程序,它把匯 編語言程序翻譯成機器語言程序。盡管“編譯程序”是特指將高級程序設(shè)計語言翻譯成低級語言的軟件,但編譯程序構(gòu)造的基本原理和技術(shù)也廣泛應(yīng)用于一般的設(shè)計和實現(xiàn),因此,是一門對實踐性要求較高的課程。匯編器、鏈接器和裝入器可由操心系統(tǒng)提供或由編譯器自帶。 第 2 頁 共 41 頁 2 編 譯器的基礎(chǔ)知識 一個編譯程序就是一個語言翻譯程序。如果源語言是像 FORTRAN, PASCAL,或 C 那樣的高級語言,目標(biāo)語言是像匯編語言或機器語言那樣的低級語言,則這種翻譯程序稱作編譯程序。比如標(biāo)識是由字母開頭,后跟字母、數(shù)字字符序列組成的一種單詞。 典型的文法的語法分析器有三類:一類是通用的語法分析方法,如CockeYoungerKasami 算法和 Early 算法,這些方法在生成編譯器時效率太低。之所以稱這樣的算法為自頂向下是由于分析樹隱含的編號是一個前序編,而且其順序是由根到葉子。編譯器也可能沒有生成真正的可執(zhí)行代碼,而是生成了某種形式的匯編代碼,這必須由匯編器、鏈接器和裝入器進(jìn)行進(jìn)一步處理。編譯器的編寫涉及到程序設(shè)計語言、計算機體系結(jié)構(gòu)、語言理論、算法和軟件工程等學(xué)科。 許多操縱源程序的軟件工具都首先完成某種類型的分析。根據(jù)編譯器的構(gòu)造方法或者它們要實現(xiàn)的功能,編譯器被分為一遍編譯器、多遍編譯器、裝入并執(zhí)行編譯器、調(diào)試編譯器、優(yōu)化編譯器等多種類別。它的功能是以任一語言的詞法規(guī)則、語法規(guī)則和語義解釋出發(fā),自動產(chǎn)生該語言的編譯程序。 第二種方法,即在程序設(shè)計語言機制上允許用戶自己編寫并行程序,這當(dāng)然比編寫串行語言對編程人員提出的要求更多。雖然抽象語 法樹是源代碼完美充分的表達(dá),即使對于代碼生成也不過這樣,但是它與目標(biāo)代碼極不相像,在控制流構(gòu)造上尤為如此。比如匯編程序是一個翻譯程序,它把匯編語言程序翻譯成機器語言程序。 預(yù)處理程序 編譯程序 匯編程序 裝配 /連接 —編輯程序 第 6 頁 共 41 頁 源程序 圖 1 圖 1 將編譯過程劃分了詞法分析、語法分析、語義分析、中 間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成、六個階級。 語法分析是編譯過程的第二個階級。 語義分析階級是審查源程序有無語義錯誤,為代碼生成階級收集類型信息。 目標(biāo)代碼生成的任務(wù)是把是間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或匯編指令代碼。所謂“遍”,也稱作“趟”,是對源程序或其等價的中間語言程序從頭到尾掃視并完成規(guī)定任務(wù)的過程。 LEX 自動地把表示輸入串詞法結(jié)構(gòu)的正規(guī)式及相應(yīng)的動作轉(zhuǎn)換成一個宿主語言的程序,即詞法分析程序,它有一個固定的名字yylex,在這里 yylex 是一個 C語言程序。但是,在《
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1