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

正文內(nèi)容

編譯原理課程設(shè)計(jì)ll遞歸下降分析器-文庫吧資料

2024-10-29 06:36本頁面
  

【正文】 nt tregister by a* * jmp 0,a: jump to a* * jpc 0,a: jump conditional to a* *******************************************/typedef struct{ alfa name。// displacement address,cann39。// level,cann39。struct instruction{ fct f。// 三種標(biāo)識符的類型 typedef enum {LIT,OPR,LOD,STO,CAL,INT,JMP,JPC} fct。// symobl類型標(biāo)識了不同類型的詞匯typedef char alfa[al+1]。// size of code array 類PCODE目標(biāo)代碼數(shù)組長度(可容納代碼行數(shù))const int lineLength = 82。// maximum address 尋址空間const int levmax = 3。// length of identifiers 標(biāo)示符的最大長度const int nmax = 14。// reserved words 保留字的個數(shù)const int txmax = 100。五、相關(guān)代碼及運(yùn)行結(jié)果實(shí)驗(yàn)代碼; : include include include include include include ifndef WIRTH_ZYC_ define WIRTH_ZYC_ using namespace std。然后通過遞歸調(diào)用語句分析過程分析,直到遇到until保留字,如果未對應(yīng)until則出錯。通過前面記錄下的jpc指令的位置,把它的跳轉(zhuǎn)位置改成當(dāng)前的代碼段指針位置,否則沒遇到else,那么此時的當(dāng)前代碼段分配指針的位置也是上面jpc指令的轉(zhuǎn)移位置,也是通過前面記錄下的jpc位置指令的位置,把它的跳轉(zhuǎn)到當(dāng)前的代碼段指針位置。然后調(diào)用語句處理過程處理 then語句后面的語句或語句塊。ifthenelse語句的處理:按if語句的語法,首先調(diào)用邏輯表達(dá)式處理過程處理if語句的條件,把相應(yīng)的真假值放到數(shù)據(jù)棧頂。因此,本編譯程序在運(yùn)行的時候,通過主程序中調(diào)用分程序處理過程block來分析分程序部分(分程序分析過程中還可能會遞歸調(diào)用block過程),然后,判斷最后讀入的符號是否為句號。除此之外,還有出錯報(bào)告過程(Error)、代碼生成過程(Gen)、測試單詞合法性及出錯恢復(fù)過程(Test)、登錄名字表過程(Enter)、查詢名字表函數(shù)(Position)以及列出類 PCODE代碼過程(Listcode)作過語法分析的輔助過程。語法分析主要由分程序分析過程(BLOCK)、參數(shù)變量分析過程(ParaDeclaration)、參數(shù)變量處理過程(ParaGetSub)、數(shù)組處理過程(ParaGetSub)、常量定義分析過程(ConstDeclaration)、變量定義分析過程(Vardeclaration)、語句分析過程(Statement)、表達(dá)式處理過程(Expression)、項(xiàng)處理過程(Term)、因子處理過程(Factor)和條件處理過程(Condition)構(gòu)成。如果遇到不合法的字符,把SYM置成NUL。如果Getch獲得的字符是數(shù)字,則繼續(xù)用Getch獲取數(shù)字,并把它們拼成一個整數(shù)或?qū)崝?shù),然后把SYM置為 INTEGER或REAL,并把拼成的數(shù)值放入NUM變量。如果這個字符是字母,則繼續(xù)獲取字符或數(shù)字,最終可以拼成一個單詞,查保留字表,如果查到為保留字,則把SYM變量賦成相應(yīng)的保留字類型值;如果沒有查到,則這個單詞應(yīng)是一個用戶自定義的標(biāo)識符(可能是變量名、常量名或是過程的名字),把SYM置為IDENT,把這個單詞存入ID變量。GETCH過程中使用了行緩沖區(qū)技術(shù)以提高程序運(yùn)行效率。詞法分析子程序分析:詞法分析子程序名為GETSYM,功能是從源程序中讀出一個單詞符號(TOTAKEN),把它的信息放入全局變量 SYM、ID和NUM中,字符變量放入CH中,語法分析器需要單詞時,直接從這三個變量中獲得。語法分析的同時,提供了出錯報(bào)告和出錯恢復(fù)的功能。四、實(shí)驗(yàn)分析PL/0語言編譯程序采用以語法分析為核心、一遍掃描的編譯方法。用表格管理程序建立變量、常量和過程表示符的說明與引用之間的信息聯(lián)系。PL/0的編譯程序和目標(biāo)程序的解釋執(zhí)行程序都是用PASCAL語言書寫的,因此PL/0語言可在配備PASCAL語言的任何機(jī)器上實(shí)現(xiàn)。三、實(shí)驗(yàn)原理PL/0語言可以看成PASCAL語言的子集,它的編譯程序是一個編譯解釋執(zhí)行系統(tǒng)。(2)擴(kuò)充條件語句的功能使其為:IFTHEN[ELSE](3)增加repeat重復(fù)語句: REPEAT{。2)對PL/0語言進(jìn)行下列擴(kuò)充(1)擴(kuò)充一維整型數(shù)組。使學(xué)生能將編譯理論與實(shí)際應(yīng)用結(jié)合起來,提高學(xué)生軟件開發(fā)的能力。[第四篇:編譯原理課程設(shè)計(jì)報(bào)告武 漢 紡 織 大 學(xué)編譯原理課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告學(xué)院:數(shù)學(xué)與計(jì)算機(jī) 專業(yè):計(jì)算機(jī) 姓名: 班級: 學(xué)號: 編譯原理編譯原理課設(shè)報(bào)告一、實(shí)驗(yàn)?zāi)康募訌?qiáng)對編譯程序的整體認(rèn)識和了解,鞏固《編譯原理》課程所學(xué)知識。此外,由于在做報(bào)告的時候,需要描繪DFA和程序流程圖,使得自己初步掌握了使用visio和word畫圖的能力。如:以前在編譯原理課上雖然知道First集合和Follow集合怎么求的,卻不知道First集合和Follow集合到底是干什么的,通過編寫程序自己明白了他們的實(shí)際作用,使得自己不僅知其然還知其所以然,從而使得自己加深了對知識點(diǎn)的理解和掌握。由于在編寫程序過程中,涉及到了正則表達(dá)式、DFA、提取公共左因子、消除左遞歸、EBNF、求First集合和Follow集合、遞歸向下分析方法以及編程語言方面的知識,所以,通過本次的課程設(shè)計(jì)的實(shí)踐,使得自己對編譯原理這門課的許多知識點(diǎn)有了更加深刻和具體的理解,而不再只限制于做題。首先最基本的成果是完成了課程設(shè)計(jì)的任務(wù),實(shí)現(xiàn)了編譯器的詞法分析和語法分析階段的功能,詞法分析主要能過濾注釋、分析出語法分析階段需要的Token并滿足語法階段的所有要求,能夠判別詞法分析階段是否出錯和出錯類型和位置。在編寫過程中,還有一類問題,就是存在公共左因子,如文法expression→ var = expression | simpleexpression,左因子為ID,在分析過程中,由于已經(jīng)取出了一個ID的Token,且生成了一個IdK的節(jié)點(diǎn),但是在當(dāng)前狀態(tài)無法確定是哪一個推導(dǎo),然而IdK節(jié)點(diǎn)已經(jīng)生成,又無法回退,并且是使用自頂向下的分析方法,已經(jīng)生成的IdK在程序上方無法使用,自己通過查閱資料等途徑的學(xué)習(xí)確定了在這種情形下的處理方式:將已經(jīng)生成的IdK節(jié)點(diǎn)傳到下方的處理程序,所以TreeNode * simple_expression(TreeNode * k)、TreeNode * additive_expression(TreeNode * k)等函數(shù)都被設(shè)計(jì)成有節(jié)點(diǎn)類型參數(shù)的函數(shù),目的就是將已經(jīng)生成的節(jié)點(diǎn)傳到下面的分析函數(shù)中去。由于C語言給出的文法有左遞歸存在,于是自己將存在左遞歸的文法改寫成EBNF的形式,并據(jù)此進(jìn)行代碼編寫。在寫語法分析的時候,已經(jīng)對編譯器的語法分析的內(nèi)容有了一定的了解,所以直接進(jìn)行了理論的學(xué)習(xí)。雖然之前寫的詞法分析的代碼已經(jīng)完成了詞法分析的需求,也是根據(jù)DFA的原理編寫的,但是在代碼結(jié)構(gòu)上卻難以體現(xiàn),在對書上的根據(jù)已知DFA寫代碼的例子進(jìn)行了詳細(xì)的研究之后,發(fā)現(xiàn)自己的代碼并沒有像書上那樣完全按照所依據(jù)的DFA各狀態(tài)轉(zhuǎn)移的關(guān)系進(jìn)行編寫,所以對代碼進(jìn)行了重寫,像書上一樣嚴(yán)格按照狀態(tài)之間轉(zhuǎn)移的方式進(jìn)行編寫,將狀態(tài)劃分成11個狀態(tài),狀態(tài)分別按1~11進(jìn)行標(biāo)注,程序也按照DFA來編寫,也實(shí)現(xiàn)了詞法分析的功能。經(jīng)過揣摩書上的例子,自己理解和掌握了怎么設(shè)計(jì)過濾注釋和分析程序中Token的DFA,于是開始根據(jù)設(shè)計(jì)好的DFA進(jìn)行編碼,最后經(jīng)過調(diào)試已經(jīng)可以正確地完成詞法階段的任務(wù)了。在充分了解了語法分析需要哪些信息時,我才真正了解了詞法分析的工作內(nèi)容和目標(biāo),才知道詞法分析需要完成哪些任務(wù)獲取到哪些信息。根據(jù)DFA及自頂向下等理論修改完善代碼等這些過程。開始著手寫代碼224。明白任務(wù)的要求和內(nèi)容224。陳火旺.《程序設(shè)計(jì)語言編譯原理》(第3版).北京:、美 Alfred Ravi Sethi Jeffrey ,姜守旭譯.《編譯原理》.24 [在此處鍵入]北京:、美 Kenneth .《編譯原理及實(shí)踐》.北京:、金成植著.《編譯程序構(gòu)造原理和實(shí)現(xiàn)技術(shù)》.北京:、體會和建議。 單擊錯誤列表,會自動選定錯誤行編譯成功,生成并顯示token串、符號表、四元式與目標(biāo)代碼 [在此處鍵入]測試if與while語句,而且while嵌套在if當(dāng)中測試goto語句,結(jié)果正確。測試錯誤檢測,程序缺少分號,錯誤列表中顯示該行缺少語句結(jié)束標(biāo)志39。錯誤信息在語法分析,語義分析,符號表檢錯中添加。 數(shù)據(jù)結(jié)構(gòu) [在此處鍵入]public static void AddErrorMessage(int lineno,string content)函數(shù)用作在發(fā)現(xiàn)錯誤時保存錯誤信息以及行號。Q|L||i|(E)|!Q對應(yīng)于每個文法編寫如下遞歸下降子程序主程序(B)[在此處鍵入] [在此處鍵入] 符號表模塊進(jìn)行符號表的儲存,添加,更新,查找,保存標(biāo)識符活躍信息以及輸出。語法分析的功能是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語法短語,如“程序”,“語句”,“表達(dá)式” 數(shù)據(jù)結(jié)構(gòu)下圖為實(shí)現(xiàn)語法分析的類Grammar,屬性與方法的作用都已說明 在此處鍵入]下面終結(jié)符與非終結(jié)符意義B程序開始Z 數(shù)據(jù)類型,如int,char,float等V 標(biāo)識符S 語句P 語句塊E 加減算術(shù)表達(dá)式D 逗號表達(dá)式T 乘除算術(shù)表達(dá)式C 關(guān)系表達(dá)式L 邏輯表達(dá)式Q 標(biāo)識符或圓括號e 表示空i 表示標(biāo)識符 a)函數(shù)文法BZV()S[[在此處鍵入]b)語句塊文法PSP|eS{P} c)語句文法表達(dá)式語句文法SV=Egoto語句文法Si:SSgoto iif語句文法Sif(E)S[else S]while語句文法Swhile(E)S聲明語句文法SZVDD,VD|=ED|e d)表達(dá)式文法ET|E+T|ETTF|T*F|T/FCC|CL|C==C|C=LLQ|Lamp。(2)程序中需要用到的主要變量為type和number 掃描子程序的算法思想:首先設(shè)置3個變量: [在此處鍵入]①token用來存放構(gòu)成單詞符號的字符串; ②number用來整型單詞;③type用來存放單詞符號的種別碼。關(guān)鍵字作為特殊標(biāo)識符處理,把它們預(yù)先安排在一張表格中(稱為關(guān)鍵字表),當(dāng)掃描程序識別出標(biāo)識符時,查關(guān)鍵字表。主程序示意圖:主程序示意圖如圖31所示。Lexical類對外提供的函數(shù)主要有:static public int RecogId(string str, int i),static public int RecogDig(string str,int i),static public int RecogOperator(string str, int i),static public int RecogBound(string str, int i),以上幾個函數(shù)構(gòu)成了詞法分析的骨架,在Lexical類中還有其他成員變量和函數(shù),主要作為這三個函數(shù)處理過程的中間步驟,為這三個函數(shù)服務(wù)。[在此處鍵入] 詞法分析模塊 Lexical類主要的工作是詞法分析獲取Token序列。然后Grammer類的語法分析程序就根據(jù)tokenList中的Token進(jìn)行語法分析,生成語法樹,最后打印語法樹。[在此處鍵入]程序流程在程序中,Lexical類的對象(Token)作為Grammer類中的一個成員變量,配合Grammer類進(jìn)行語法分析。工程文件總體上是按照九個類的格局分為十個文件,分別是九個類的聲明文件和實(shí)現(xiàn)文件。Grammer類的主要工作是根據(jù)Lexical類詞法分析之后的Token進(jìn)行語法分析,生成語法樹,最后并輸出語法樹。本程序采用C語言以面向?qū)ο蟮乃枷刖帉?,程序分為幾部分:詞法分析(Lexical),語法分析(Grammer),目標(biāo)代碼生成(ObjectCode)。(程序由幾個類組成: Token類和Variable類SymbolTable類ObjectCode類Lexical類Grammar類Four_Yuan類Action類ErrorItem類,分別為詞法分析和語法分析類。若語法正確,則用語法制導(dǎo)翻譯法進(jìn)行語義翻譯;生成并打印出語法樹;若語法錯誤,要求指出出錯性質(zhì)和出錯位置(行號)。將不翻譯的注釋等符號先濾掉,只保留要翻譯的符號串,即要求設(shè)計(jì)一個供詞法分析調(diào)用的預(yù)處理子程序;; [在此處鍵入](種別碼,屬性值,行號)。將詞法分析器設(shè)計(jì)成供語法分析器調(diào)用的子程序。這一過程可以表示為:源程序→編譯器 →目標(biāo)機(jī)器代碼程序?qū)W生在學(xué)習(xí)《編譯原理》課程過程中,結(jié)合各章節(jié)的構(gòu)造編譯程序的基本理論,要求用C語言描述及上機(jī)調(diào)試,實(shí)現(xiàn)一個 C編譯程序(包括詞法分析,語法分析等重要子程序),使學(xué)生將理論與實(shí)際應(yīng)用結(jié)合起來,受到軟件設(shè)計(jì)等開發(fā)過程的全面訓(xùn)練,從而提高學(xué)生軟件開發(fā)的能力。編譯器將源程序(source language)編寫的程序作為輸入,翻譯產(chǎn)生目標(biāo)語言(target language)機(jī)器代碼的等價(jià)程序。、體會和建議。我們還做了附加功能,即編譯后端,有中間代碼優(yōu)化,生成目標(biāo)代碼匯編語言。將不翻譯的注釋等符號先濾掉,只保留要翻譯的符號串,即要求設(shè)計(jì)一個供詞法分析調(diào)用的預(yù)處理子程序;第二部分,語法分析,用遞歸下降法,實(shí)現(xiàn)對表達(dá)式、各種說明語句、控制語句進(jìn)行語法分析。將詞法分析器設(shè)計(jì)成供語法分析器調(diào)用的子
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1