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

正文內(nèi)容

編譯原理課程設(shè)計(jì)教案-文庫(kù)吧資料

2024-11-10 21:50本頁(yè)面
  

【正文】 void error(int n)。public:PL0(char* source,char*destination)。// 聲明開始、表達(dá)式開始和項(xiàng)開始符號(hào)集 Table table[txmax+1]。// 一些符號(hào)對(duì)應(yīng)的symbol類型表合 char mnemonic[8][6]。// 保留字表symbol wsym[norw+1]。// 詞法分析器中用于臨時(shí)存放正在分析的詞instruction code[cxmax+1]。// code line vector errorString。// code line string errStr[]。int cx。// character count int ll。// last identifier read int num。// last character read symbol sym。class PL0 {protected:bool listswitch,sourceEnd。}other。}inOther。obj0 kind。t big than amax }。t big than levmaxint a。// function code int l。// functions typedef set symset。// alfa類型用于標(biāo)識(shí)符 typedef enum {CONSTANT,VARIABLE,PROCEDURE,ARRAY} obj0。// 行緩沖區(qū)長(zhǎng)度typedef enum {NUL,IDENT,NUMBER,PLUS,MINUS,TIMES,SLASH,ODDSYM,EQL,NEQ,LSS,LEQ,GTR,GEQ,LPAREN,RPAREN,COMMA,SEMICOLON,PERIOD,BECOMES,BEGINSYM,ENDSYM,IFSYM,THENSYM,WHILESYM,WRITESYM,READSYM,DOSYM,CALLSYM,CONSTSYM,VARSYM,PROCSYM,ELSESYM,REPEATSYM,UNTILSYM} symbol。// maximum depth of block nesting 最大允許的塊嵌套層數(shù) const int cxmax = 200。// digits in numbers 數(shù)字的最大長(zhǎng)度 const int amax = 2047。// length of identifier table 標(biāo)示符表的長(zhǎng)度(容量)const int al = 10。const int norw = 16。調(diào)用條件表達(dá)式處理過(guò)程生成相應(yīng)代碼把結(jié)果放在數(shù)據(jù)棧頂,再生成條件轉(zhuǎn)移指令,轉(zhuǎn)移位置為上面記錄的CX1。Repeat語(yǔ)句的處理:首先用CX1變量記下當(dāng)前代碼段分配位置,作為循環(huán)的開始位置。then后的語(yǔ)句處理完后,如果遇到else,就調(diào)用語(yǔ)句處理過(guò)程處理else語(yǔ)句后面的語(yǔ)句或語(yǔ)句塊,這時(shí)當(dāng)前代碼段分配指針的位置就應(yīng)該是上面的jpc指令的轉(zhuǎn)移位置。接下去記錄下代碼段分配位置(即下面生成的jpc指令的位置),然后生成 條件轉(zhuǎn)移jpc指令(遇0或遇假轉(zhuǎn)移),轉(zhuǎn)移地址未知暫時(shí)填0。如果是句號(hào)且分程序分析中未出錯(cuò),則是一個(gè)合法的PL/0程序,可以運(yùn)行生成的代碼,否則就說(shuō)明源PL/0程序是不合法的,輸出出錯(cuò)提示即可。由PL/0的語(yǔ)法圖可知:一個(gè)完整的PL/0程序是由分程序和句號(hào)構(gòu)成的。這些過(guò)程在結(jié)構(gòu)上構(gòu)成一個(gè)嵌套的層次結(jié)構(gòu)。語(yǔ)法分析子程序分析:語(yǔ)法分析子程序采用了自頂向下的遞歸子程序法,語(yǔ)法分析同時(shí)也根據(jù)程序的語(yǔ)義生成相應(yīng)三元代碼,并提供了出錯(cuò)處理的機(jī)制。如果識(shí)別出其它合法的符號(hào)(比如:賦值號(hào)、大于號(hào)、小于等于號(hào)等),則把SYM則成相應(yīng)的類型。查保留字表時(shí)使用了二分法查找以提高效率。詞法分析器的分析過(guò)程:調(diào)用GETSYM時(shí),它通過(guò)GETCH過(guò)程從源程序中獲得一個(gè)字符。Getch過(guò)程通過(guò)反復(fù)調(diào)用Getch子過(guò)程從源程序過(guò)獲取字符,并把它們拼成單詞。在源程序沒(méi)有錯(cuò)誤編譯通過(guò)的情況下,調(diào)用類PCODE解釋程序解釋執(zhí)行生成的類PCODE代碼。詞法分析和代碼生成作為獨(dú)立的子程序供語(yǔ)法分析程序調(diào)用。當(dāng)源程序編譯正確時(shí),PL/0編譯程序自動(dòng)調(diào)用解釋執(zhí)行程序,對(duì)目標(biāo)代碼進(jìn)行解釋執(zhí)行,并按用戶程序的要求輸入數(shù)據(jù)和輸出運(yùn)行結(jié)果。其編譯過(guò)程采用一趟掃描方式,以語(yǔ)法分析程序?yàn)楹诵?,詞法分析和代碼生成程序都作為一個(gè)獨(dú)立的過(guò)程,當(dāng)語(yǔ)法分析需要讀單詞時(shí)就調(diào)用詞法分析程序,而當(dāng)語(yǔ)法分析正確需要生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)用代碼生成程序。PL/0的目標(biāo)程序?yàn)榧傧霔J接?jì)算機(jī)的匯編語(yǔ)言,與具體計(jì)算機(jī)無(wú)關(guān)。}UNTIL 可根據(jù)自己具體情況從中選擇2個(gè)以上題目進(jìn)行擴(kuò)充。擴(kuò)充var數(shù)組:VAR (:)〈下界〉和〈上界〉可用常量標(biāo)識(shí)名。二、實(shí)驗(yàn)內(nèi)容1)仔細(xì)閱讀PL/0編譯程序文本(編譯原理(第二版)張素琴 呂映芝 蔣維杜 戴桂蘭 主編清華大學(xué)出版社),并上機(jī)調(diào)試通過(guò)。通過(guò)本次課程設(shè)計(jì)掌握編譯程序調(diào)試技巧和設(shè)計(jì)編譯程序一般的原則,加深對(duì)詞法分析、語(yǔ)法分析、語(yǔ)義分析等編譯階段及實(shí)用編譯系統(tǒng)的認(rèn)識(shí)。此外,對(duì)于文檔的編寫和美化自己也獲得了許多有用的經(jīng)驗(yàn)。由于以前編寫代碼都是使用JAVA語(yǔ)言,所以C/C++很多內(nèi)容都忘記了,通過(guò)本次的實(shí)踐,自己又重新拾起了以前的知識(shí)。此外,對(duì)以前那些已掌握的知識(shí)有了溫習(xí)和動(dòng)手鍛煉的機(jī)會(huì)。語(yǔ)法分析主要能根據(jù)遞歸向下的分析思想和C文法對(duì)詞法分析獲取的Token進(jìn)行語(yǔ)法分析,能夠構(gòu)造出語(yǔ)法樹,能夠判別語(yǔ)法分析過(guò)程中是否出錯(cuò)以及出錯(cuò)位置和錯(cuò)誤類型。通過(guò)這次的編譯原理課程的學(xué)習(xí)和實(shí)踐,自己獲益良多。由于在編寫代碼的過(guò)程中需要確定分析是否正確或選擇多個(gè)文法中的某一個(gè)文法進(jìn)行分析,有時(shí)必須探測(cè)需要的或下一個(gè)Token的類型,在這種情況下需要求First集合,在推導(dǎo)中若存在empty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進(jìn)行判斷,以確定程序的走向。首先自己對(duì)遞歸向下分析法進(jìn)行了學(xué)習(xí),將書上的幾個(gè)遞歸向下分析的偽代碼看過(guò)之后,自己對(duì)遞歸向下的分析方法的原理有了初步的認(rèn)識(shí),大概知道了根據(jù)文法怎么分析,但是對(duì)于如何編寫代碼卻還在此處鍵入]是難以下手,于是就對(duì)照TINY語(yǔ)言的文法看了幾遍書后面的TINY語(yǔ)言的遞歸向下分析的語(yǔ)法分析程序,這樣就基本知道了C語(yǔ)言的語(yǔ)法分析程序怎么寫。再后來(lái)寫報(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),于是又重寫了一次詞法分析函數(shù)scan()的代碼,將狀態(tài)縮減為5個(gè),且不再用15來(lái)表示,而是像書上那樣分別取了名字(START、INNUM、INID、INDBSYM、DONE),同時(shí)為了簡(jiǎn)化代碼將輸出Token到文件的部分從scan()中剝離開來(lái),而在Lexical類中加了一個(gè)printToken()的函數(shù),使scan()函數(shù)邏輯更加清晰,使讀者能夠容易地將代碼與DFA進(jìn)行查看比照。這只是詞法分析的原始代碼,在之后還進(jìn)行了兩次徹底的改動(dòng)。充分了解了詞法分析的任務(wù)之后,就開始理論知識(shí)的學(xué)習(xí)。自己著手寫詞法分析的時(shí)候還不清楚詞法分析的任務(wù)內(nèi)容,還不知道詞法分析的結(jié)果是什么,詞法分析出錯(cuò)的情況和類型有哪些,也總是將詞法分析和語(yǔ)法分析混在一起,不明白哪些錯(cuò)誤在詞法分析中報(bào),哪些錯(cuò)誤在語(yǔ)法分析中判斷,后來(lái)經(jīng)過(guò)查書、網(wǎng)上資料、請(qǐng)教同學(xué)等途徑逐步清晰了詞法分析的工作內(nèi)容是從源代碼文件中獲取出Token,供語(yǔ)法分析使用。完成基本功能224。理論知識(shí)的了解224。直接拷貝好歹也檢查一下錯(cuò)誤對(duì)于編譯原理的這次課程設(shè)計(jì),自己經(jīng)歷了從剛開始的不懂224。[在此處鍵入]測(cè)試優(yōu)化,輸入課件中的代碼,結(jié)果與課件一樣。39。 目標(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è)試打開文件測(cè)試保存文件如果沒(méi)打開文件,直接敲代碼,點(diǎn)保存時(shí)會(huì)彈出另存為窗口[在此處鍵入]測(cè)試錯(cuò)誤檢測(cè),程序缺少main函數(shù)的類型,錯(cuò)誤列表中顯示第一行函數(shù)缺少錯(cuò)誤類型。public static string PrintErrorList()把所有發(fā)現(xiàn)的錯(cuò)誤格式化后統(tǒng)一輸出。 數(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ì)信息并輸出。amp。Token定義Token定義:Token類型(TokenType): 語(yǔ)法分析模塊語(yǔ)法分析是編譯過(guò)程的一個(gè)邏輯階段。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標(biāo)識(shí)符。⑴ 關(guān)鍵字表的初值。Lexical類的代碼結(jié)構(gòu)和主要的成員變量和函數(shù)及其含義如下圖所示:算法的基本任務(wù)是從字符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào),其基本思想是[在此處鍵入]根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的種類,拼出相應(yīng)的單詞符號(hào)。詞法分析階段的代碼被封裝成一個(gè)類——Lexical,Token中主要是Lexical類的聲明代碼。同時(shí),這也是程序的流程。它們的關(guān)系是這樣的:Grammer類的一個(gè)成員變量temp首先對(duì)源程序刪除注釋,然后進(jìn)行詞法分析獲取所有Token,并將獲取的Token存儲(chǔ)在Token對(duì)象的tokenList(List類型)中。,Four_Yuan,cs,,他們分別是Lexical類聲明文件、Lexical類實(shí)現(xiàn)文件、Grammer類聲明文件、Grammer類實(shí)現(xiàn)文件。在處理過(guò)程中,Token類的對(duì)象作為L(zhǎng)exical類的一個(gè)成員變量,配合Grammer類進(jìn)行語(yǔ)法分析。Lexical類主要的工作是詞法分析獲取Token。工程分為幾個(gè)文件:,Four_Yuan,cs,)。(流程)本節(jié)主要分析程序的代碼結(jié)構(gòu)和代碼工程文件的劃分。(2)語(yǔ)法分析要求用學(xué)習(xí)過(guò)的自底向上或自頂向下的分析方法等,實(shí)現(xiàn)對(duì)表達(dá)式、各種說(shuō)明語(yǔ)句、控制語(yǔ)句進(jìn)行語(yǔ)法分析。功能包括:。 要求:(1)設(shè)計(jì)詞法分析器設(shè)計(jì)各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計(jì)種別碼。通常地,源程序?yàn)楦呒?jí)語(yǔ)言(highlevel language),C語(yǔ)言程序,而目標(biāo)則是 機(jī)器語(yǔ)言的目標(biāo)代碼(object code),也就是可以在計(jì)算機(jī)硬件中運(yùn)行的機(jī)器代碼軟件程序。[在此處鍵入]編譯器是將C語(yǔ)言翻譯為匯編語(yǔ)言代碼的計(jì)算機(jī)程序。通過(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é)果 。若語(yǔ)法正確,則用語(yǔ)法制導(dǎo)翻譯法進(jìn)行語(yǔ)義翻譯;生成并打印出語(yǔ)法樹;若語(yǔ)法錯(cuò)誤,要求指出出錯(cuò)性質(zhì)和出錯(cuò)位置(行號(hào))。詞法分析器具備預(yù)處理功能。五、運(yùn)行結(jié)果與數(shù)據(jù)分析:六、設(shè)計(jì)總結(jié)體會(huì):第二篇:編譯原理課程設(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序列。F()。F()。F()。F()。//取下一個(gè)字符的機(jī)內(nèi)碼 if(re==右括號(hào))F(); } Else if(re==變量)//執(zhí)行EiF F();Else if(re==常量)//執(zhí)行EnF F(); } F()子程序算法描述 Void F(){ re=Getsymbol()。E()子程序的算法描述 Void E(){ re=Getsymbol()。B()和relop()子程序的算法描述在B()子程序中,不用判斷任何的單詞,就依次調(diào)用E(),relop(),E(),執(zhí)行BE relop E Void relop(){ re=Getsymbol()。取下一個(gè)單詞,是)就調(diào)用S();否則也出錯(cuò)。//取下一個(gè)字符的機(jī)內(nèi)碼 If(re==等號(hào))調(diào)用E();} Else ERROR(); } 該程序就是對(duì)通過(guò)Ge
點(diǎn)擊復(fù)制文檔內(nèi)容
合同協(xié)議相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1