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

正文內(nèi)容

編譯原理課程設(shè)計(jì)ll遞歸下降分析器-在線瀏覽

2024-10-29 06:36本頁(yè)面
  

【正文】 。學(xué)習(xí)更好的知識(shí)重在基礎(chǔ),編譯原理的學(xué)習(xí)為我們提供非常好的橋梁和道路。構(gòu)成詞法分析器的一種簡(jiǎn)單方法是用狀態(tài)轉(zhuǎn)換圖來(lái)描述源語(yǔ)言詞法記號(hào)的結(jié)構(gòu),然后手工把這種狀態(tài)轉(zhuǎn)換圖翻譯成為識(shí)別詞法記號(hào)的程序。把自然語(yǔ)言構(gòu)造成正規(guī)式,把正規(guī)式構(gòu)造成有限自動(dòng)機(jī)NFA,然后根據(jù)子集構(gòu)造法把有限自動(dòng)機(jī)構(gòu)造成無(wú)限自動(dòng)機(jī)DFA,根據(jù)極小化DFA狀態(tài)數(shù)算法把DFA構(gòu)造成最簡(jiǎn)DFA,其次根據(jù)最簡(jiǎn)DFA畫(huà)出轉(zhuǎn)換表,根據(jù)轉(zhuǎn)換表畫(huà)出裝換圖,最后根據(jù)裝換圖就可以編寫(xiě)詞法分析器。附件1:參考文獻(xiàn)《編譯原理(第2版)》 高等教育出版社; 《C程序設(shè)計(jì)及應(yīng)用教程(第2版)》 人民教育出版社。using 。using 。static List key = new List()。//保存標(biāo)識(shí)符static List sz = new List()。//保存關(guān)系運(yùn)算符static List ys = new List()。//路徑,并存入datafor(int i = 0。i++){ (“第” +(i + 1)+ “行code: ” + (i))。} //分別輸出存儲(chǔ)在四個(gè)List中的String(“關(guān)鍵字,輸入回車”)。foreach(string id in key){ (id)。//輸出所有的標(biāo)識(shí)符()。}(“數(shù)字,輸入回車”)。foreach(string id in sz){ (id)。()。}(“算數(shù)運(yùn)算符,輸入回車”)。foreach(string id in ys){ (id)。()。 39。int j = 0。temp = ”“。_39。j++。while((a)){ temp = temp + ()。a = code[j]。if(!(temp)){ // (”添加成功“)。}} else {//(”標(biāo)識(shí)符:“+temp)。(temp)。j++。while((a)){ temp = temp + ()。a = code[j]。.39。j++。while((a)){ temp = temp + ()。a = code[j]。E39。e39。j++。while((a)){temp = temp + ()。a = code[j]。if(!(temp)){ //(”添加成功標(biāo)識(shí)符==“)。} } else if(a == 39。){ temp = temp + ()。a = code[j]。if(!(temp)){ //(”添加成功標(biāo)識(shí)符==“)。} } else if(a == 39。){ temp = temp + ()。a = code[j]。if(!(temp)){ //(”添加成功關(guān)系==“)。} } else if(a == 39。){ temp = temp + ()。a = code[j]。=39。j++。}// (”關(guān)系符“+temp)。(temp)。+39。39。/39。*39。j++。//(”運(yùn)算符“+temp)。(temp)。}} } }//判斷是不是保留字的IsKey方法static bool isKey(string key){bool flag = false。i 。//(key+”是不是key“+flag)。} else { flag = false。// (flag+”是不是key)。} } }第三篇:編譯原理課程設(shè)計(jì)課 程 設(shè) 計(jì) 報(bào) 告設(shè)計(jì)題目:一個(gè)簡(jiǎn)單文法的編譯器前端的設(shè)計(jì)與實(shí)現(xiàn)班級(jí): 計(jì)算機(jī)1206 組長(zhǎng)學(xué)號(hào):201239 組長(zhǎng)姓名:閆智宣 指導(dǎo)教師:李曉華 設(shè)計(jì)時(shí)間:2014年12月[在此處鍵入]設(shè)計(jì)分工組長(zhǎng)學(xué)號(hào)及姓名: 20123974閆智宣分工:語(yǔ)法分析,四元式生成,目標(biāo)代碼優(yōu)化及生成 組員1學(xué)號(hào)及姓名:20123977廖峭 分工:詞法分析,錯(cuò)誤處理 組員2學(xué)號(hào)及姓名:20123959郭天龍分工:符號(hào)表生成,語(yǔ)義動(dòng)作插入,操作界面[在此處鍵入]摘要編譯原理課程設(shè)計(jì)是通過(guò)C語(yǔ)言編譯器相關(guān)子系統(tǒng)的設(shè)計(jì),進(jìn)一步加深對(duì)編譯器構(gòu)造的理解;第一部分詞法分析,設(shè)計(jì)各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計(jì)種別碼,制作掃描器識(shí)別一個(gè)個(gè)單詞,返回值為識(shí)別碼的序號(hào),返回Token序列。詞法分析器具備預(yù)處理功能。若語(yǔ)法正確,則用語(yǔ)法制導(dǎo)翻譯法進(jìn)行語(yǔ)義翻譯;生成并打印出語(yǔ)法樹(shù);若語(yǔ)法錯(cuò)誤,要求指出出錯(cuò)性質(zhì)和出錯(cuò)位置(行號(hào))。通過(guò)此次課程設(shè)計(jì),提高了我們的獨(dú)立分析問(wèn)題、解決問(wèn)題的能力,以及系統(tǒng)軟件設(shè)計(jì)的能力; 提高程序設(shè)計(jì)能力、程序調(diào)試能力,團(tuán)結(jié)協(xié)作能力關(guān)鍵詞:詞法分析,語(yǔ)法分析,四元式生成,錯(cuò)誤處理,符號(hào)表生成,語(yǔ)義動(dòng)作插入,中間代碼優(yōu)化,生成目標(biāo)代碼 [在此處鍵入]目錄摘要 設(shè)計(jì)任務(wù) 設(shè)計(jì)要求(流程) 詞法分析模塊 功能 數(shù)據(jù)結(jié)構(gòu) 算法 語(yǔ)法分析模塊 數(shù)據(jù)結(jié)構(gòu) 符號(hào)表模塊 數(shù)據(jù)結(jié)構(gòu) 四元式模塊[在此處鍵入] 數(shù)據(jù)結(jié)構(gòu) 語(yǔ)義動(dòng)作分析模塊 數(shù)據(jù)結(jié)構(gòu) 錯(cuò)誤處理模塊 數(shù)據(jù)結(jié)構(gòu) 目標(biāo)代碼模塊 數(shù)據(jù)結(jié)構(gòu) 程序流程圖 程序說(shuō)明 實(shí)驗(yàn)結(jié)果 。[在此處鍵入]編譯器是將C語(yǔ)言翻譯為匯編語(yǔ)言代碼的計(jì)算機(jī)程序。通常地,源程序?yàn)楦呒?jí)語(yǔ)言(highlevel language),C語(yǔ)言程序,而目標(biāo)則是 機(jī)器語(yǔ)言的目標(biāo)代碼(object code),也就是可以在計(jì)算機(jī)硬件中運(yùn)行的機(jī)器代碼軟件程序。 要求:(1)設(shè)計(jì)詞法分析器設(shè)計(jì)各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計(jì)種別碼。功能包括:。(2)語(yǔ)法分析要求用學(xué)習(xí)過(guò)的自底向上或自頂向下的分析方法等,實(shí)現(xiàn)對(duì)表達(dá)式、各種說(shuō)明語(yǔ)句、控制語(yǔ)句進(jìn)行語(yǔ)法分析。(流程)本節(jié)主要分析程序的代碼結(jié)構(gòu)和代碼工程文件的劃分。工程分為幾個(gè)文件:,Four_Yuan,cs,)。Lexical類主要的工作是詞法分析獲取Token。在處理過(guò)程中,Token類的對(duì)象作為L(zhǎng)exical類的一個(gè)成員變量,配合Grammer類進(jìn)行語(yǔ)法分析。,Four_Yuan,cs,,他們分別是Lexical類聲明文件、Lexical類實(shí)現(xiàn)文件、Grammer類聲明文件、Grammer類實(shí)現(xiàn)文件。它們的關(guān)系是這樣的:Grammer類的一個(gè)成員變量temp首先對(duì)源程序刪除注釋,然后進(jìn)行詞法分析獲取所有Token,并將獲取的Token存儲(chǔ)在Token對(duì)象的tokenList(List類型)中。同時(shí),這也是程序的流程。詞法分析階段的代碼被封裝成一個(gè)類——Lexical,Token中主要是Lexical類的聲明代碼。Lexical類的代碼結(jié)構(gòu)和主要的成員變量和函數(shù)及其含義如下圖所示:算法的基本任務(wù)是從字符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào),其基本思想是[在此處鍵入]根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的種類,拼出相應(yīng)的單詞符號(hào)。⑴ 關(guān)鍵字表的初值。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標(biāo)識(shí)符。Token定義Token定義:Token類型(TokenType): 語(yǔ)法分析模塊語(yǔ)法分析是編譯過(guò)程的一個(gè)邏輯階段。amp。 數(shù)據(jù)結(jié)構(gòu)在此處鍵入] 四元式模塊四元式為中間代碼,編譯程序進(jìn)行完語(yǔ)義分析后,先生成中間代碼作為過(guò)渡,此時(shí)中間代碼與目標(biāo)代碼已經(jīng)比較相似 數(shù)據(jù)結(jié)構(gòu)[ 在此處鍵入]在語(yǔ)法分析中嵌入相應(yīng)的語(yǔ)義動(dòng)作,生成四元式 數(shù)據(jù)結(jié)構(gòu)[[在此處鍵入] GEQ(+)()(*)(/)(+,i1,i2,t)PUSH(i)ASSI(=)(=,t,_,POP)LABER(i)(lb,_,_,i)GOTO(i)(gt,_,_,i)IF(if)(if,a,_,_)EL(el)(el,_,_,_)IE(ie)(ie,_,_,_)WH()(wh,_,_,_)DO()(do,a,_,_)WE(we)(we,_,_,_) 錯(cuò)誤處理模塊 保存運(yùn)行時(shí)發(fā)現(xiàn)的錯(cuò)誤,儲(chǔ)存行號(hào)已經(jīng)詳細(xì)信息并輸出。public static string PrintErrorList()把所有發(fā)現(xiàn)的錯(cuò)誤格式化后統(tǒng)一輸出。 目標(biāo)代碼模塊目標(biāo)代碼生成把優(yōu)化后的中間代碼變換成目標(biāo)代碼,此處的目標(biāo)代碼為匯編代碼,采用單寄存器生成目標(biāo)代碼 數(shù)據(jù)結(jié)構(gòu)[在此處鍵入]對(duì)于一個(gè)基本塊有如下流程圖W:操作符,B:第一操作數(shù),C:第二操作數(shù),R:寄存器網(wǎng)上找一段話抄上 [在此處鍵入]測(cè)試打開(kāi)文件測(cè)試保存文件如果沒(méi)打開(kāi)文件,直接敲代碼,點(diǎn)保存時(shí)會(huì)彈出另存為窗口[在此處鍵入]測(cè)試錯(cuò)誤檢測(cè),程序缺少main函數(shù)的類型,錯(cuò)誤列表中顯示第一行函數(shù)缺少錯(cuò)誤類型。39。[在此處鍵入]測(cè)試優(yōu)化,輸入課件中的代碼,結(jié)果與課件一樣。直接拷貝好歹也檢查一下錯(cuò)誤對(duì)于編譯原理的這次課程設(shè)計(jì),自己經(jīng)歷了從剛開(kāi)始的不懂224。理論知識(shí)的了解224。完成基本功能224。自己著手寫(xiě)詞法分析的時(shí)候還不清楚詞法分析的任務(wù)內(nèi)容,還不知道詞法分析的結(jié)果是什么,詞法分析出錯(cuò)的情況和類型有哪些,也總是將詞法分析和語(yǔ)法分析混在一起,不明白哪些錯(cuò)誤在詞法分析中報(bào),哪些錯(cuò)誤在語(yǔ)法分析中判斷,后來(lái)經(jīng)過(guò)查書(shū)、網(wǎng)上資料、請(qǐng)教同學(xué)等途徑逐步清晰了詞法分析的工作內(nèi)容是從源代碼文件中獲取出Token,供語(yǔ)法分析使用。充分了解了詞法分析的任務(wù)之后,就開(kāi)始理論知識(shí)的學(xué)習(xí)。這只是詞法分析的原始代碼,在之后還進(jìn)行了兩次徹底的改動(dòng)。再后來(lái)寫(xiě)報(bào)告的時(shí)候,發(fā)現(xiàn)分析出Token的那個(gè)DFA并不是最簡(jiǎn)的,有很多多余的狀態(tài),完全可以用一個(gè)flag標(biāo)志來(lái)標(biāo)識(shí),從而簡(jiǎn)化代碼結(jié)構(gòu),于是又重寫(xiě)了一次詞法分析函數(shù)scan()的代碼,將狀態(tài)縮減為5個(gè),且不再用15來(lái)表示,而是像書(shū)上那樣分別取了名字(START、INNUM、INID、INDBSYM、DONE),同時(shí)為了簡(jiǎn)化代碼將輸出Token到文件的部分從scan()中剝離開(kāi)來(lái),而在Lexical類中加了一個(gè)printToken()的函數(shù),使scan()函數(shù)邏輯更加清晰,使讀者能夠容易地將代碼與DFA進(jìn)行查看比照。首先自己對(duì)遞歸向下分析法進(jìn)行了學(xué)習(xí),將書(shū)上的幾個(gè)遞歸向下分析的偽代碼看過(guò)之后,自己對(duì)遞歸向下的分析方法的原理有了初步的認(rèn)識(shí),大概知道了根據(jù)文法怎么分析,但是對(duì)于如何編寫(xiě)代碼卻還在此處鍵入]是難以下手,于是就對(duì)照TINY語(yǔ)言的文法看了幾遍書(shū)后面的TINY語(yǔ)言的遞歸向下分析的語(yǔ)法分析程序,這樣就基本知道了C語(yǔ)言的語(yǔ)法分析程序怎么寫(xiě)。由于在編寫(xiě)代碼的過(guò)程中需要確定分析是否正確或選擇多個(gè)文法中的某一個(gè)文法進(jìn)行分析,有時(shí)必須探測(cè)需要的或下一個(gè)Token的類型,在這種情況下需要求First集合,在推導(dǎo)中若存在empty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進(jìn)行判斷,以確定程序的走向。通過(guò)這次的編譯原理課程的學(xué)習(xí)和實(shí)踐,自己獲益良多。語(yǔ)法分析主要能根據(jù)遞歸向下的分析思想和C文法對(duì)詞法分析獲取的Token進(jìn)行語(yǔ)法分析,能夠構(gòu)造出語(yǔ)法樹(shù),能夠判別語(yǔ)法分析過(guò)程中是否出錯(cuò)以及出錯(cuò)位置和錯(cuò)誤類型。此外,對(duì)以前那些已掌握的知識(shí)有了溫習(xí)和動(dòng)手鍛煉的機(jī)會(huì)。由于以前編寫(xiě)代碼都是使用JAVA語(yǔ)言,所以C/C++很多內(nèi)容都忘記了,通過(guò)本次的實(shí)踐,自己又重新拾起了以前的知識(shí)。此外,對(duì)于文檔的編寫(xiě)和美化自己也獲得了許多有用的經(jīng)驗(yàn)。通過(guò)本次課程設(shè)計(jì)掌握編譯程序調(diào)試技巧和設(shè)計(jì)編譯程序一般的原則,加深對(duì)詞法分析、語(yǔ)法分析、語(yǔ)義分析等編譯階段及實(shí)用編譯系統(tǒng)的認(rèn)識(shí)。二、實(shí)驗(yàn)內(nèi)容1)仔細(xì)閱讀PL/0編譯程序文本(編譯原理(第二版)張素琴 呂映芝 蔣維杜 戴桂蘭 主編清華大學(xué)出版社),并上機(jī)調(diào)試通過(guò)。擴(kuò)充var數(shù)組:VAR (:)〈下界〉和〈上界〉可用常量標(biāo)識(shí)名。}UNTIL 可根據(jù)自己具體情況從中選擇2個(gè)以上題目進(jìn)行擴(kuò)充。PL/0的目標(biāo)程序?yàn)榧傧霔J接?jì)算機(jī)的匯編語(yǔ)言,與具體計(jì)算機(jī)無(wú)關(guān)。其編譯過(guò)程采用一趟掃描方式,以語(yǔ)法分析程序?yàn)楹诵?,詞法分析和代碼生成程序都作為一個(gè)獨(dú)立的過(guò)程,當(dāng)語(yǔ)法分析需要讀單詞時(shí)就調(diào)用詞法分析程序,而當(dāng)語(yǔ)法分析正確需要生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)用代碼生成程序。當(dāng)源程序編譯正確時(shí),PL/0編譯程序自動(dòng)調(diào)用解釋執(zhí)行程序,對(duì)目標(biāo)代碼進(jìn)行解釋執(zhí)行,并按用戶程序的要求輸入數(shù)據(jù)和輸出運(yùn)行結(jié)果。詞法分析和代碼生成作為獨(dú)立的子程序供語(yǔ)法分析程序調(diào)用。在源程序沒(méi)有錯(cuò)誤編譯通過(guò)的情況下,調(diào)用類PCODE解釋程序解釋執(zhí)行生成的類PCODE代碼。Getch過(guò)程通過(guò)反復(fù)調(diào)用Getch子過(guò)程從源程序過(guò)獲取字符,并把它們拼成單詞。詞法分析器的分析過(guò)程:調(diào)用GETSYM時(shí),它通過(guò)GETCH過(guò)程從源程序中獲得一個(gè)字符。查保留字表時(shí)使用了二分法查找以提高效率。如果識(shí)別出其它合法的符號(hào)(比如:賦值號(hào)、大于號(hào)、小于等于號(hào)等),則把SYM則成相應(yīng)的類型。語(yǔ)法分析子程序分析:語(yǔ)法分析子程序采用了自頂向下的遞歸子程序法,語(yǔ)法分析同時(shí)也根據(jù)程序的語(yǔ)義生成相應(yīng)三元代碼,并提供了出錯(cuò)處理的機(jī)制。這些過(guò)程在結(jié)構(gòu)上構(gòu)成一個(gè)嵌套的層次結(jié)構(gòu)。由PL/0的語(yǔ)法圖可知:一個(gè)完整的PL/0程序是由分程序和句號(hào)構(gòu)成的。如果是句號(hào)且分程序分析中未出錯(cuò),則是一個(gè)合法的PL/0程序,可以運(yùn)行生成的代碼,否則就說(shuō)明源PL/0程序是不合法的,輸出出錯(cuò)提示即可。接下去記錄下代碼段分配位置(即下面生成的jpc指令的位置),然后生成 條件轉(zhuǎn)移jpc指令(遇0或遇假轉(zhuǎn)移),轉(zhuǎn)移地址未知暫時(shí)填0。then后的語(yǔ)句處理完后,如果遇到else,就調(diào)用語(yǔ)句處理過(guò)程處理else語(yǔ)句后面的語(yǔ)句或語(yǔ)句塊,這時(shí)當(dāng)前代碼段分配指針的位置就應(yīng)該是上面的jpc指令的轉(zhuǎn)移位置。Repeat語(yǔ)句的處理:首先用CX1變量記下當(dāng)前代碼段分配位置,作為循環(huán)的開(kāi)始位置。調(diào)用條件表達(dá)式處理過(guò)程生成相應(yīng)代碼把結(jié)果放在數(shù)據(jù)棧頂,再生成條件轉(zhuǎn)移指令,轉(zhuǎn)移位置為上面記錄的CX1。const int norw = 16。// length of identifier table 標(biāo)示符表的長(zhǎng)度(容量)const int al = 10。// digits in n
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1