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

正文內(nèi)容

編譯原理課程設(shè)計ll遞歸下降分析器(更新版)

2024-10-29 06:36上一頁面

下一頁面
  

【正文】 stant a* * opr 0,a: execute operation a* * lod l,a: load variable l,a* * sto l,a: store variable l,a* * cal l,a: call procedure a at level l* * int 0,a: increment tregister by a* * jmp 0,a: jump to a* * jpc 0,a: jump conditional to a* *******************************************/typedef struct{ alfa name。// 三種標識符的類型 typedef enum {LIT,OPR,LOD,STO,CAL,INT,JMP,JPC} fct。// length of identifiers 標示符的最大長度const int nmax = 14。通過前面記錄下的jpc指令的位置,把它的跳轉(zhuǎn)位置改成當前的代碼段指針位置,否則沒遇到else,那么此時的當前代碼段分配指針的位置也是上面jpc指令的轉(zhuǎn)移位置,也是通過前面記錄下的jpc位置指令的位置,把它的跳轉(zhuǎn)到當前的代碼段指針位置。除此之外,還有出錯報告過程(Error)、代碼生成過程(Gen)、測試單詞合法性及出錯恢復(fù)過程(Test)、登錄名字表過程(Enter)、查詢名字表函數(shù)(Position)以及列出類 PCODE代碼過程(Listcode)作過語法分析的輔助過程。如果這個字符是字母,則繼續(xù)獲取字符或數(shù)字,最終可以拼成一個單詞,查保留字表,如果查到為保留字,則把SYM變量賦成相應(yīng)的保留字類型值;如果沒有查到,則這個單詞應(yīng)是一個用戶自定義的標識符(可能是變量名、常量名或是過程的名字),把SYM置為IDENT,把這個單詞存入ID變量。四、實驗分析PL/0語言編譯程序采用以語法分析為核心、一遍掃描的編譯方法。(2)擴充條件語句的功能使其為:IFTHEN[ELSE](3)增加repeat重復(fù)語句: REPEAT{。此外,由于在做報告的時候,需要描繪DFA和程序流程圖,使得自己初步掌握了使用visio和word畫圖的能力。在編寫過程中,還有一類問題,就是存在公共左因子,如文法expression→ var = expression | simpleexpression,左因子為ID,在分析過程中,由于已經(jīng)取出了一個ID的Token,且生成了一個IdK的節(jié)點,但是在當前狀態(tài)無法確定是哪一個推導(dǎo),然而IdK節(jié)點已經(jīng)生成,又無法回退,并且是使用自頂向下的分析方法,已經(jīng)生成的IdK在程序上方無法使用,自己通過查閱資料等途徑的學(xué)習確定了在這種情形下的處理方式:將已經(jīng)生成的IdK節(jié)點傳到下方的處理程序,所以TreeNode * simple_expression(TreeNode * k)、TreeNode * additive_expression(TreeNode * k)等函數(shù)都被設(shè)計成有節(jié)點類型參數(shù)的函數(shù),目的就是將已經(jīng)生成的節(jié)點傳到下面的分析函數(shù)中去。經(jīng)過揣摩書上的例子,自己理解和掌握了怎么設(shè)計過濾注釋和分析程序中Token的DFA,于是開始根據(jù)設(shè)計好的DFA進行編碼,最后經(jīng)過調(diào)試已經(jīng)可以正確地完成詞法階段的任務(wù)了。明白任務(wù)的要求和內(nèi)容224。錯誤信息在語法分析,語義分析,符號表檢錯中添加。(2)程序中需要用到的主要變量為type和number 掃描子程序的算法思想:首先設(shè)置3個變量: [在此處鍵入]①token用來存放構(gòu)成單詞符號的字符串; ②number用來整型單詞;③type用來存放單詞符號的種別碼。[在此處鍵入] 詞法分析模塊 Lexical類主要的工作是詞法分析獲取Token序列。Grammer類的主要工作是根據(jù)Lexical類詞法分析之后的Token進行語法分析,生成語法樹,最后并輸出語法樹。將不翻譯的注釋等符號先濾掉,只保留要翻譯的符號串,即要求設(shè)計一個供詞法分析調(diào)用的預(yù)處理子程序;; [在此處鍵入](種別碼,屬性值,行號)。、體會和建議。return flag。for(int i = 0。){ temp = temp + ()。}} else { if(a == 39。if(a == 39。// (”關(guān)系符“+temp)。} //(”關(guān)系符“+temp)。} }}// (”數(shù)字:“+temp)。)|| (39。)){ temp = temp + ()。} }} else if((a)){ temp = temp + ()。j++。while(j ){ a = code[j]。()。foreach(string id in bsf){ (id)。i 。namespace LexicalAnalysis { class Program { static string[] keys = { “static”, “true”, “return”, “string”, “Length”, “break”, “Console”, “WriteLine”, “bool”, “false”, “ture”, “void”, “if”, “else”, “while”, “int”, “float”, “for”, “enum”, “default”, “case”, “double”, “do” }。詞法分析器的任務(wù)是把構(gòu)成源程序的字符流翻譯成詞法記號流。缺點是對文法要求高,必須是LL(1)文法,同時由于遞歸調(diào)用較多,影響分析器的效率。本人因為上課無法做到打醒十二分專心聽課,經(jīng)常會分神,所以學(xué)習的效果也不怎么好。”*FT39。cout^”TE39。+39。void e1()。算術(shù)表達式文法如下: EE+T|ET|T TT*F|T/F|F F(E)| i 首先改寫文法為LL(1)文法;然后為每一個非終結(jié)符,構(gòu)造相應(yīng)的遞歸過程,過程的名字表示規(guī)則左部的非終結(jié)符;過程體按規(guī)則右部符號串的順序編寫。即,若A174。如果我們走了一大段錯路,最后必須回頭,那么,就應(yīng)把已經(jīng)做的一大堆語義工作(指中間代碼產(chǎn)生工作和各種表格的簿記工作)推倒重來。按照語法分析樹的建立方法,我們可以粗略地把語法分析辦法分成兩類,一類是自上而下分析,另一類是自下而上分析法。我們知道,語言的語法結(jié)構(gòu)是用上下文無關(guān)文法描述的。其次,由于回溯,就碰到一大堆麻煩問題。對于文法中每一個非終結(jié)符A的各個產(chǎn)生式的候選首集符兩兩不相交。概要設(shè)計編程實現(xiàn)給定算術(shù)表達式的遞歸下降分析器。//判斷輸出信息 void e()?!眪void t(){} if(inputstream[temp]==39。){} else right=0。){} else cout/FT39。如果上課沒有好好的認真聽課,自己獨自學(xué)習就感到非常的吃力,而且效果也不好。通過本次課程設(shè)計清楚地了解到遞歸下降分析法的優(yōu)缺點,其優(yōu)點是簡單、直觀,易于構(gòu)造分析程序。構(gòu)成詞法分析器的一種簡單方法是用狀態(tài)轉(zhuǎn)換圖來描述源語言詞法記號的結(jié)構(gòu),然后手工把這種狀態(tài)轉(zhuǎn)換圖翻譯成為識別詞法記號的程序。using 。//路徑,并存入datafor(int i = 0。//輸出所有的標識符()。}(“算數(shù)運算符,輸入回車”)。int j = 0。while((a)){ temp = temp + ()。(temp)。.39。E39。a = code[j]。a = code[j]。a = code[j]。a = code[j]。(temp)。*39。}} } }//判斷是不是保留字的IsKey方法static bool isKey(string key){bool flag = false。// (flag+”是不是key)。通過此次課程設(shè)計,提高了我們的獨立分析問題、解決問題的能力,以及系統(tǒng)軟件設(shè)計的能力; 提高程序設(shè)計能力、程序調(diào)試能力,團結(jié)協(xié)作能力關(guān)鍵詞:詞法分析,語法分析,四元式生成,錯誤處理,符號表生成,語義動作插入,中間代碼優(yōu)化,生成目標代碼 [在此處鍵入]目錄摘要 設(shè)計任務(wù) 設(shè)計要求(流程) 詞法分析模塊 功能 數(shù)據(jù)結(jié)構(gòu) 算法 語法分析模塊 數(shù)據(jù)結(jié)構(gòu) 符號表模塊 數(shù)據(jù)結(jié)構(gòu) 四元式模塊[在此處鍵入] 數(shù)據(jù)結(jié)構(gòu) 語義動作分析模塊 數(shù)據(jù)結(jié)構(gòu) 錯誤處理模塊 數(shù)據(jù)結(jié)構(gòu) 目標代碼模塊 數(shù)據(jù)結(jié)構(gòu) 程序流程圖 程序說明 實驗結(jié)果 。功能包括:。Lexical類主要的工作是詞法分析獲取Token。同時,這也是程序的流程。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標識符。public static string PrintErrorList()把所有發(fā)現(xiàn)的錯誤格式化后統(tǒng)一輸出。直接拷貝好歹也檢查一下錯誤對于編譯原理的這次課程設(shè)計,自己經(jīng)歷了從剛開始的不懂224。充分了解了詞法分析的任務(wù)之后,就開始理論知識的學(xué)習。由于在編寫代碼的過程中需要確定分析是否正確或選擇多個文法中的某一個文法進行分析,有時必須探測需要的或下一個Token的類型,在這種情況下需要求First集合,在推導(dǎo)中若存在empty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進行判斷,以確定程序的走向。由于以前編寫代碼都是使用JAVA語言,所以C/C++很多內(nèi)容都忘記了,通過本次的實踐,自己又重新拾起了以前的知識。擴充var數(shù)組:VAR (:)〈下界〉和〈上界〉可用常量標識名。當源程序編譯正確時,PL/0編譯程序自動調(diào)用解釋執(zhí)行程序,對目標代碼進行解釋執(zhí)行,并按用戶程序的要求輸入數(shù)據(jù)和輸出運行結(jié)果。詞法分析器的分析過程:調(diào)用GETSYM時,它通過GETCH過程從源程序中獲得一個字符。這些過程在結(jié)構(gòu)上構(gòu)成一個嵌套的層次結(jié)構(gòu)。then后的語句處理完后,如果遇到else,就調(diào)用語句處理過程處理else語句后面的語句或語句塊,這時當前代碼段分配指針的位置就應(yīng)該是上面的jpc指令的轉(zhuǎn)移位置。// length of identifier table 標示符表的長度(容量)const int al = 10。// alfa類型用于標識符 typedef enum {CONSTANT,VARIABLE,PROCEDURE,ARRAY} obj0。t big than amax }。class PL0 {protected:bool listswitch,sourceEnd。int cx。// 保留字表symbol wsym[norw+1]。}void error(int n)。dx,int lev)。void listcode(int cx0)。 dx,int lev)?!? ”error 0018: while型循環(huán)語句中丟了do“, ”error 0019: 語句后的標識符不正確“, ”error 0020: 應(yīng)為關(guān)系運算符“, ”error 0021: 表達式內(nèi)標識符屬性不能是過程“, ”error 0022: 表達式中漏掉了右括號‘)’“, ”error 0023: 因子后的非法符號“, ”error 0024: 表達式開始符不能是此符號“, ”error 0025: 文件在不該結(jié)束的地方結(jié)束了“, ”error 0026: 結(jié)束符出現(xiàn)在不該結(jié)束的地方“, ”error 0027: “,”error 0028: “,”error 0029: “,”error 0030: “, ”error 0031: 數(shù)越界“, ”error 0032: read語句括號中標識符不是變量“, ”error 0033: else附近錯誤“ , ”error 0034: repeat附近錯誤“}。strcpy(word[7],”if“)。strcpy(word[15],”while“)。wsym[7]= IFSYM。wsym[15]= WHILESYM。]= PLUS。/39。ssym[39。]= PERIOD。39。strcpy(mnemonic[JMP],” jmp “)。// 代碼分配指針,代碼生成模塊總在cx所指位置生成新的代碼ll= 0。sprintf(s,”第 %d 行:“,codeNo)。// cls space and tab if(isalpha(ch))// id or reserved word {k=0。else { do{a[kk]= 39。if(strcmp(id, word[k])j= k1。039。if(ch == 39。if(ch == 39。sourceEnd=true。cc= cc+1。symset::iterator it。// initial table index int cx0。while(sym == COMMA){}getsym()。vardeclaration(tx,dx,lev)。if(sym ==SEMICOLON)getsym()。i((symbol)i)。table[tx0].= cx。gen(OPR,0,0)。table[tx].kind=k。break。while(strcmp(table[i].name,id)!=0)i。getsym()。dx,int lev){ if(sym == IDENT){enter(VARIABLE,tx,dx,lev)。getsym()。getsym()。i= 0。if(sym!=LPAREN)error(34)。}while(sym == COMMA)。t((symbol)t)。if(sym!=IDENT)error(14)。for(int i = THENSYM。statement(tmp,tx,lev)。code[cx2].a=cx。while((sym)!=()){if(sourceEnd)return。if(sourceEnd)re
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1