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

正文內(nèi)容

c語言編譯器設(shè)計與實現(xiàn)畢業(yè)論文-文庫吧資料

2025-08-02 09:04本頁面
  

【正文】 //到文件結(jié)尾 return (Token())。 char line[Token::NAME_SIZE] = {0}。 string s。 關(guān)鍵字與標(biāo)識符的識別C對于關(guān)鍵字的識別,是通過先將它們看作是標(biāo)識符,然后再調(diào)用Token類的get_int()方法,根據(jù)返回值Tag是否22(標(biāo)示符的標(biāo)志)為來判斷是標(biāo)示符還是關(guān)鍵字。 Token是本實驗的所有類的基類,有2個成員變量:Tag,Value。掃描程序在識別出每個記號的同時,還會計算出該記號的特性(比如串值)這五類單詞將用不同的方法處理。開 始輸入C源文件 是否文件結(jié)尾巴尾Y N 進入主控模塊選擇識別的單詞形成Token字Y停 止 圖41 單獨成趟的詞法分析控制流程圖,其核心函數(shù)是scan( ),它每次從第一個非空格或換行符開始識別,直到遇到空格或者換行符,遇到單行注釋就跳過本行從“//”開始的以后字符識別,遇到多行注釋就跳過直到遇到“*/”為止(不支持注釋嵌套)。詞法分析程序的主要任務(wù)就是掃描程序、識別單詞、轉(zhuǎn)換并輸出屬性字。 其它數(shù)(1個或更多的數(shù)字序列)標(biāo)識符(1個或更多的字母序列)表42C語言的記號除了上表的記號之外,C語言的源程序還要遵循以下的詞法規(guī)則:代碼應(yīng)是自由書寫格式;空白符由空格、制表位和新行組成?!捌渌庇浱柧褪菙?shù)和標(biāo)識符了,數(shù)是一個或多個數(shù)字的序列,而標(biāo)識符又是一個或多個字母的序列。特殊符號共有12種:分別是4種基本的整數(shù)運算符號,5種比較符號(等號、小于號、小于等于、大于、大于等于),以及左括號、右括號、分號、賦值符號。 C詞法分析程序的實現(xiàn)C語言的記號分為5種類型:標(biāo)示符,關(guān)鍵字,數(shù)字,算符和界限符。一種是用手工方式構(gòu)造,另一種是所謂詞法分析程序的自動生成。 在實際做詞法分析時,考慮了所有的C語言現(xiàn)象,使得每一個C語言程序都可以被此法分析切割為單詞并且賦值上屬性。符號類別符號值表41 詞法Token字這五類單詞將用不同的方法處理。作為詞法分析程序的符號可以有各種不同的內(nèi)部表現(xiàn)形式,原則是不同的符號能彼此區(qū)別開且有唯一的表示。例如,+,,*,/,(,),和++, , =;界符在語言中作為語法上的分界;數(shù)字,廣義上就是源程序中的字面值。記號與自然語言中的單詞類似:每一個記號都是表示源程序中信息單元的字符序列。一個C源程序經(jīng)過C編譯器的編譯之后,生成三地址的四元表達式目標(biāo)代碼,在整個編譯過程中,這4個階段分別承擔(dān)了相應(yīng)的翻譯任務(wù)。對于進行復(fù)雜優(yōu)化的編譯器,應(yīng)特別注意選擇允許簡單重組的中間代碼表示。因此,對于構(gòu)建項目集簇,項目的操作相當(dāng)頻繁,如何表示和處理項目成為構(gòu)造分析表的重點。(3) 項目(item)在文法G中,某個產(chǎn)生式的右部標(biāo)上“點號”的產(chǎn)生式,再放置一個向前所搜符號a,成為LR(1)項目。因為在編譯的全程中對符號表的訪問非常頻繁,所以插入、刪除和訪問等符號表操作都必須比常規(guī)操作更有效。(2) 符號表(symbol table)符號表中的信息與標(biāo)識符(函數(shù)、變量、常量以及數(shù)據(jù)類型等)有關(guān)。有時還必須保留字符串本身或由此派生出的其他信息(例如:與標(biāo)識符記號相關(guān)的名字或數(shù)字記號值)。 C編譯器中的主要數(shù)據(jù)結(jié)構(gòu)下面列舉出在C編譯器中使用到的主要數(shù)據(jù)結(jié)構(gòu),它們通常在編譯的多個階段都需要使用到,并用來在各階段中共享一些特定數(shù)據(jù)[8]。Lr類的包含語法分析的總控程序,用成員函數(shù)analyse()實現(xiàn)對語法的分析,在語法分析推導(dǎo)或歸約的每一步驟中,通過語義規(guī)則實現(xiàn)對屬性的計算,以達到對語義的處理。Scanner類是詞法分析的類,成員函數(shù)scan()每次返回一個Token字。ReadCfg類從文件讀取C語言文法,并保存在文法結(jié)點Cfg_node中。(6) 語法分析類Lr:將語言結(jié)構(gòu)的語義以屬性(attribute)的形式賦予代表此結(jié)構(gòu)的文法符號,而屬性的計算以語義規(guī)則(semantic rules)的形式賦予由文法符號組成的產(chǎn)生式;在語法分析推導(dǎo)或歸約的每一步驟中,通過語義規(guī)則實現(xiàn)對屬性的計算,以達到對語義的處理。(4) 詞法掃描類Scanner:將源程序的字符序列收集到稱作記號(token)的有意義單元中,即完成與語言單詞拼寫相類似的任務(wù)。(2) 文法類ReadCfg:文法規(guī)則類,定義C語言文法的規(guī)則。(7)提供基本出錯處理。(5)將符號表提供給語義分析程序加工處理。(3)識別單詞的屬性并填入構(gòu)造好的符號表中。一般的說,C編譯器實現(xiàn)了下列幾項功能: (1)從C源程序中逐一取出單詞。 C編譯器的功能C編譯器的主要任務(wù)是分析基于C語言規(guī)范的字符組成的C源程序,把它們識別為一個個具有獨立意義的單詞符號(Token),并識別其有關(guān)屬性再轉(zhuǎn)換成長度統(tǒng)一的屬性字,以供后續(xù)語義部分分析使用。布爾表達式通常只作為測試條件出現(xiàn)在控制語句中。布爾表達式由對兩個算術(shù)表達式的比較組成,所有比較使用和=比較運算符。除此之外,還有數(shù)據(jù)的輸入和輸出(輸入語句一次只讀入一個變量,而輸出語句一次只輸出一個表達式)。C只有兩個控制語句:if語句和while 語句,這兩個控制語句本身也可包含語句序列。C語言的程序結(jié)構(gòu)很簡單,它的語法與C相似但規(guī)模小于C語言。然后用命令行的形式調(diào)用C編譯器()對該源程序進行編譯,經(jīng)過詞法分析、語法分析并在此基礎(chǔ)上展開語義處理,如果源程序中沒有錯誤,則最終生成目標(biāo)代碼即三地址碼的四元式表示形式。 C語言的基本描述C語言是本實驗設(shè)計要實現(xiàn)的一種微型語言的名稱,該語言的源程序為文本形式的ASCII字符序列。④ 開發(fā)過程中未涉及任何法律責(zé)任。② 開發(fā)過程中不存在知識產(chǎn)權(quán)問題。 時間可行性從時間上看,在兩個月的時間里學(xué)習(xí)相關(guān)知識,并開發(fā)C編譯器系統(tǒng),時間上是有點緊,但是不是不可能實現(xiàn),通過兩個多月的努力功能應(yīng)該基本實現(xiàn)。本系統(tǒng)的開發(fā),是用典型的VS2012或者其他c++編譯工具開發(fā),主要是對算法的處理,包括詞法分析和分析表的構(gòu)造,及目標(biāo)代碼的輸出。運行可行性是對組織結(jié)構(gòu)的影響,現(xiàn)有人員和機構(gòu)和環(huán)境對系統(tǒng)的適應(yīng)性及人員培訓(xùn)補充計劃的可行性。 運行可行性對新系統(tǒng)運行后給現(xiàn)行系統(tǒng)帶來的影響(包括組織機構(gòu)、管理方式、工作環(huán)境等)和后果進行估計和評價。C編譯系統(tǒng)用的是標(biāo)準(zhǔn)C++開發(fā)語言,調(diào)試相對簡單,當(dāng)前的計算機硬件配置也完全能滿足開發(fā)的需求,因此在技術(shù)上是絕對可行的。所有開支都不大,所以經(jīng)濟上是可行的。開發(fā)、運行和維護費用主要包括:購買和安裝設(shè)備的費用:無。第三章 C編譯器可行性分析及總體設(shè)計 可行性分析 經(jīng)濟可行性經(jīng)濟可行性研究是對組織的經(jīng)濟現(xiàn)狀和投資能力進行分析,對系統(tǒng)建設(shè)運行和維護費用進行估算,對系統(tǒng)建成后可能取得的社會和經(jīng)濟效益進行估計。運用重構(gòu)技術(shù)把已有的串行語言編寫的程序經(jīng)過分析分解成可并行的成分,然后分配到多處理機上運行。(4) 高級語言之間的轉(zhuǎn)換工具:為了減少重新編制程序所耗費的人力和時間,就要解決如何把一種高級語言轉(zhuǎn)換成另一種高級語言,乃至匯編語言轉(zhuǎn)換成高級語言的問題,這種異種程序設(shè)計語言之間的翻譯轉(zhuǎn)換工作要對被轉(zhuǎn)換的語言進行詞法和語法分析,只不過生成的目標(biāo)語言是另一種高級語言而已,這與實現(xiàn)一個完整的編譯程序相比工作量要少些。調(diào)試器的功能越強則實現(xiàn)越復(fù)雜,它必須與語法分析、語義處理有緊密聯(lián)系?,F(xiàn)在的可視化開發(fā)工具基本都具備了這個功能。實際上編譯程序本身也是一種軟件開發(fā)工具。(4) 各種具體因素:例如系統(tǒng)功能要求、硬件開發(fā)環(huán)境、軟件開發(fā)工具等。(3) 編譯技術(shù):詞法分析、語法分析、語義分析、代碼優(yōu)化及代碼生成的相關(guān)技術(shù)有很多,必須根據(jù)所開發(fā)的編譯器的需求和特點來選擇最合適的編譯技術(shù)和方法。在定義C語言的過程中,是通過嚴(yán)格制定其詞法規(guī)則、語法規(guī)則和語義規(guī)則來達到的。相信在不久的將來,編譯器的開發(fā)將主要借助于成熟的自動化生成編譯程序技術(shù)。 編譯程序的開發(fā) 歷史與發(fā)展在編譯器開發(fā)的原始階段,人們主要用機器語言或匯編語言來構(gòu)造編譯程序,難度極大且效率很低。能否達到這樣的理想情況,很大程度上取決于所采用的數(shù)據(jù)結(jié)構(gòu),它們是各個階段都需要使用到的,并用來在各階段之間交流信息。 編譯器中的主要數(shù)據(jù)結(jié)構(gòu)當(dāng)然,編譯器的各個階段使用的算法與支持這些階段的數(shù)據(jù)結(jié)構(gòu)之間的交互是非常密切的。(3) 由于可將編譯程序按模塊依次調(diào)入內(nèi)存,有利于采用覆蓋技術(shù),以減少執(zhí)行編譯程序時所占的內(nèi)存空間。一般而言,多遍掃描源程序具有如下優(yōu)點:(1) 由于采用了模塊結(jié)構(gòu),各遍掃描的功能相對獨立,整個編譯程序的結(jié)構(gòu)比較清晰。顯然,第一個模塊所掃描的是字符序列形式的源程序,最后一個模塊所輸出的是目標(biāo)代碼,而每一個中間模塊輸出的是與源程序等價的內(nèi)部表示或中間代碼。對于絕大部分語言(例如Pascal或C),實現(xiàn)一遍掃描的編譯程序是非常困難的,所以宜于采用多遍掃描的編譯程序結(jié)構(gòu)。這里所說的“遍”,是指對源程序或其內(nèi)部表示從頭到尾掃視一次,并進行有關(guān)的加工處理工作,每一遍的工作都是從獲取上一遍的工作結(jié)果開始,經(jīng)過本遍的加工后,將結(jié)果保存起來以便交給下一遍[5]。 編譯器的組織 編譯的分遍,簡要介紹了編譯器的6個階段各自應(yīng)完成的基本工作,并通過圖22指出了它們之間的相互關(guān)系,但需要注意的是,這些關(guān)系僅代表它們之間的邏輯關(guān)系,并不一定就是執(zhí)行時間上的先后順序。上述編譯過程的階段劃分只是一個典型模式,事實上并非所有的編譯程序都分成這6個階段,有些編譯程序并不生成中間代碼,有些編譯程序并不進行優(yōu)化,有些最簡單的編譯程序甚至在語法分析的同時產(chǎn)生目標(biāo)代碼。這種改進包括對編址模式的選擇、提高性能、將速度慢的指令更換成速度快的以及刪除多余的操作等。正是出于這點考慮,本實驗設(shè)計選擇了與機器指令無關(guān)的三地址碼的四元式表示形式。(5) 代碼生成器(code generator)這是編譯的最后必備階段,它將中間代碼(或經(jīng)優(yōu)化后的中間代碼)轉(zhuǎn)換成特定機器上的絕對指令代碼或可重新定位的指令代碼或匯編指令代碼。所謂中間代碼,是指一種結(jié)構(gòu)簡單、含義明確、形式多樣化的記號系統(tǒng),它比較容易能轉(zhuǎn)換為目標(biāo)代碼。這些優(yōu)化和改進一般是在語義分析之后完成的。語義分析程序通常將計算后的屬性值添加到語法樹中(也可將屬性添加到符號表中)。而在程序執(zhí)行階段才能確定的程序特性稱為動態(tài)語義,語義分析程序無法對這類特性做出分析。語義分析程序的職責(zé)就是分析這樣的語義,為代碼生成階段搜集相關(guān)的語義信息。(3) 語義分析程序(semantic analyzer)程序的語義就是它的“意思”,程序如何運行以及運行結(jié)果都由它的語義來決定。語法分析定義了程序的結(jié)構(gòu)元素及其關(guān)系。掃描程序還可完成與識別記號一起執(zhí)行的其他操作,例如,可將相應(yīng)的記號輸入到對應(yīng)的符號表中。這一編譯過程一般由如下6個階段構(gòu)成,它們執(zhí)行不同的邏輯操作如圖22所示[4]: (1) 掃描程序(scanner)在這個階段,編譯器閱讀源程序(通常以字符流的形式表示,),由掃描程序執(zhí)行詞法分析(lexical analysis):它將字符序列收集到稱為記號(token)的單元中,也就是說,將其識別為一個個符合編程語言詞法規(guī)范的單詞符號。這個定義可擴展到包含將一個高級語言程序轉(zhuǎn)換成匯編語言程序的系統(tǒng),將一個高級語言程序轉(zhuǎn)換成另一種高級語言程序的系統(tǒng),從一個機器語言程序轉(zhuǎn)換成另一種機器語言程序的系統(tǒng),從一種高級語言程序轉(zhuǎn)換成一種中間語言程序的系統(tǒng),等等。接著,人們又深化了生成有效目標(biāo)代碼的方法,這些就構(gòu)成了傳統(tǒng)的編譯器,在這個過程中運用到的技術(shù)被一直使用至今。當(dāng)分析問題變得相對成熟時,設(shè)計者們又花費了很多的精力來研究這一部分的編譯器的自動構(gòu)造,這就是分析程序生成器(parser generator)最初的雛形。隨著對形式語言和自動機理論的研究,人們對高級程序設(shè)計語言的認(rèn)識越來越深,對編譯器結(jié)構(gòu)的設(shè)計也越來越清晰。匯編語言大大提高了程序編寫速度和準(zhǔn)確度,但它也有許多缺點。諾依曼在存儲程序計算機方面的先鋒作用,使得編寫一串代碼或程序已成為可能和必要,這樣計算機就可以執(zhí)行所需的計算。其中,源程序一般為高級語言(Highlevel language),如Pascal,C++等,而目標(biāo)語言則是匯編語言或目標(biāo)機器的機器語言[3]。44 北京郵電大學(xué)畢業(yè)設(shè)計第二章 理論基礎(chǔ) 編譯系統(tǒng)概述 什么是編譯器編譯器,是將便于人類編寫、閱讀、維護的計算機高級語言程序翻譯為機器能夠識別、運行的計算機低級語言程序的一種系統(tǒng)軟件。Open64的設(shè)計結(jié)構(gòu)好,分析優(yōu)化全面,是編譯器高級研究的理想平臺。它們中的一些項目被認(rèn)為是高質(zhì)量的,而且對現(xiàn)代編譯理論感興趣的人都可以較容易地得到它們的免費源代碼。在九十年代,作為GNU項目或其它開放源代碼項目的一部分,許多免費的編譯器或編譯器構(gòu)造工具被開發(fā)出來。其次,編譯器已越來越成為基于窗口的可視化交互開發(fā)環(huán)境(Interactive Development Environment,IDE)的一部分,該環(huán)境還包括了智能編輯器、連接程序、調(diào)試程序以及項目管理程序等,已經(jīng)成為了事實上的編譯器行業(yè)標(biāo)準(zhǔn)。他們大多是以特定的軟件項目為背景來進行一些與編譯器開發(fā)相關(guān)或類似的研究分析,他們的研究目標(biāo)大多是基于某種實驗型高級語言的編譯器開發(fā)和優(yōu)化改進,然后把有價值的研究成果移植或運用到產(chǎn)品級的編譯器開發(fā)中()。編譯器的開發(fā)具有極高的實用價值和意義,高級語言編譯器的性能決定了基于該語言平臺所開發(fā)出的軟件的質(zhì)量。這正是本實驗的研究意義所在。編譯器的開發(fā)者們總是希望能夠?qū)⒏鞣N代碼優(yōu)化技術(shù)充分地運用在自己的編譯器設(shè)計中,但往往事與愿違,畢竟優(yōu)化操作本身也是需要付出開銷的。 當(dāng)前編譯器國內(nèi)外的發(fā)展情況在編譯
點擊復(fù)制文檔內(nèi)容
語文相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1