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

正文內(nèi)容

編譯原理課程設(shè)計簡介-文庫吧資料

2024-11-14 22:22本頁面
  

【正文】 型表ssym[39。+39。memset(line,0,sizeof(line))。memset(ssym,0,100*sizeof(symbol))。wsym[16]= WRITESYM。wsym[14]= VARSYM。wsym[12]= THENSYM。wsym[10]= READSYM。wsym[8]= ODDSYM。wsym[6]= ENDSYM。wsym[4]= DOSYM。wsym[2]= CALLSYM。strcpy(word[16],”write“)。strcpy(word[14],”var“)。strcpy(word[12],”then“)。strcpy(word[10],”read“)。strcpy(word[8],”odd“)。strcpy(word[6],”end“)。strcpy(word[4],”do“)。// 初始化存儲保留字strcpy(word[2],”call“)。// PL0構(gòu)造函數(shù)PL0::PL0(char* source,char*destination){ listswitch=true,sourceEnd=false?!? ”error 0011: 標(biāo)識符沒說明“, ”error 0012: 賦值語句中,賦值號左部標(biāo)識符屬性應(yīng)是變量“, ”error 0013: 賦值語句左部標(biāo)識符應(yīng)是賦值號:=“, ”error 0014: call后應(yīng)為標(biāo)識符“, ”error 0015: call后標(biāo)識符屬性應(yīng)為過程“, ”error 0016: 條件語句中丟了then“, ”error 0017: 丟了end或。endif : include “”// 錯誤字符串?dāng)?shù)組string PL0::errStr[]={“,”error 0001: 常數(shù)說明中“=”寫成“:=”“, ”error 0002: 常數(shù)說明中的“=”后應(yīng)為數(shù)字“, ”error 0003: 常數(shù)說明中的標(biāo)識符后應(yīng)是“=”“, ”error 0004: const,var,procedure后應(yīng)為標(biāo)識符“, ”error 0005: 漏掉了‘,’或‘?;刂穠oid SaveCode()。void interpret()。 tx,intamp。void condition(symset fsys,int tx,int lev)。void term(symset fsys,int tx,int lev)。void statement(symset fsys,int tx,int lev)。dx,int lev)。void vardeclaration(intamp。tx,intamp。int position(alfa id,int tx)。tx,int amp。合法void block(int lev,int tx,symset fsys)。個字符void gen(fct x,int y,int z)。位置和出錯代碼void getsym()。~PL0(){fclose(fin),fclose(fout)。// 符號表FILE* fin,*fout。// 類PCODE指令助記符表symset declbegsys,statbegsys,facbegsys。// 保留字表中每一個保留字對應(yīng)的symbol類型symbol ssym[100]。// destination code arrayalfa word[norw+1]。// error array alfa a。// error stringchar line[lineLength]。// code allocation index int codeNo。// line length int kk,err。// last number readint cc。// last symbol read alfa id。char ch。} Table。int val。union {struct{int level,adr,size。// 類PCODE指令類型,包含三個字段:指令f、層差l和另一個操作數(shù)a/******************************************* * lit 0,a: load constant 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。// 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)代碼及運行結(jié)果實驗代碼; : 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)用邏輯表達式處理過程處理if語句的條件,把相應(yīng)的真假值放到數(shù)據(jù)棧頂。因此,本編譯程序在運行的時候,通過主程序中調(diào)用分程序處理過程block來分析分程序部分(分程序分析過程中還可能會遞歸調(diào)用block過程),然后,判斷最后讀入的符號是否為句號。除此之外,還有出錯報告過程(Error)、代碼生成過程(Gen)、測試單詞合法性及出錯恢復(fù)過程(Test)、登錄名字表過程(Enter)、查詢名字表函數(shù)(Position)以及列出類 PCODE代碼過程(Listcode)作過語法分析的輔助過程。語法分析主要由分程序分析過程(BLOCK)、參數(shù)變量分析過程(ParaDeclaration)、參數(shù)變量處理過程(ParaGetSub)、數(shù)組處理過程(ParaGetSub)、常量定義分析過程(ConstDeclaration)、變量定義分析過程(Vardeclaration)、語句分析過程(Statement)、表達式處理過程(Expression)、項處理過程(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ù)以提高程序運行效率。詞法分析子程序分析:詞法分析子程序名為GETSYM,功能是從源程序中讀出一個單詞符號(TOTAKEN),把它的信息放入全局變量 SYM、ID和NUM中,字符變量放入CH中,語法分析器需要單詞時,直接從這三個變量中獲得。語法分析的同時,提供了出錯報告和出錯恢復(fù)的功能。四、實驗分析PL/0語言編譯程序采用以語法分析為核心、一遍掃描的編譯方法。用表格管理程序建立變量、常量和過程表示符的說明與引用之間的信息聯(lián)系。PL/0的編譯程序和目標(biāo)程序的解釋執(zhí)行程序都是用PASCAL語言書寫的,因此PL/0語言可在配備PASCAL語言的任何機器上實現(xiàn)。三、實驗原理PL/0語言可以看成PASCAL語言的子集,它的編譯程序是一個編譯解釋執(zhí)行系統(tǒng)。(2)擴充條件語句的功能使其為:IFTHEN[ELSE](3)增加repeat重復(fù)語句: REPEAT{。2)對PL/0語言進行下列擴充(1)擴充一維整型數(shù)組。使學(xué)生能將編譯理論與實際應(yīng)用結(jié)合起來,提高學(xué)生軟件開發(fā)的能力。[第三篇:編譯原理課程設(shè)計報告武 漢 紡 織 大 學(xué)編譯原理課程設(shè)計實驗報告學(xué)院:數(shù)學(xué)與計算機 專業(yè):計算機 姓名: 班級: 學(xué)號: 編譯原理編譯原理課設(shè)報告一、實驗?zāi)康募訌妼幾g程序的整體認(rèn)識和了解,鞏固《編譯原理》課程所學(xué)知識。此外,由于在做報告的時候,需要描繪DFA和程序流程圖,使得自己初步掌握了使用visio和word畫圖的能力。如:以前在編譯原理課上雖然知道First集合和Follow集合怎么求的,卻不知道First集合和Follow集合到底是干什么的,通過編寫程序自己明白了他們的實際作用,使得自己不僅知其然還知其所以然,從而使得自己加深了對知識點的理解和掌握。由于在編寫程序過程中,涉及到了正則表達式、DFA、提取公共左因子、消除左遞歸、EBNF、求First集合和Follow集合、遞歸向下分析方法以及編程語言方面的知識,所以,通過本次的課程設(shè)計的實踐,使得自己對編譯原理這門課的許多知識點有了更加深刻和具體的理解,而不再只限制于做題。首先最基本的成果是完成了課程設(shè)計的任務(wù),實現(xiàn)了編譯器的詞法分析和語法分析階段的功能,詞法分析主要能過濾注釋、分析出語法分析階段需要的Token并滿足語法階段的所有要求,能夠判別詞法分析階段是否出錯和出錯類型和位置。在編寫過程中,還有一類問題,就是存在公共左因子,如文法expression→ var = expression | simpleexpression,左因子為ID,在分析過程中,由于已經(jīng)取出了一個ID的Token,且生成了一個IdK的節(jié)點,但是在當(dāng)前狀態(tài)無法確定是哪一個推導(dǎo),然而IdK節(jié)點已經(jīng)生成,又無法回退,并且是使用自頂向下的分析方法,已經(jīng)生成的IdK在程序上方無法使用,自己通過查閱資料等途徑的學(xué)習(xí)確定了在這種情形下的處理方式:將已經(jīng)生成的IdK節(jié)點傳到下方的處理程序,所以TreeNode * simple_expression(TreeNode * k)、TreeNode * additive_expression(TreeNode * k)等函數(shù)都被設(shè)計成有節(jié)點類型參數(shù)的函數(shù),目的就是將已經(jīng)生成的節(jié)點傳到下面的分析函數(shù)中去。由于C語言給出的文法有左遞歸存在,于是自己將存在左遞歸的文法改寫成EBNF的形式,并據(jù)此進行代碼編寫。在寫語法分析的時候,已經(jīng)對編譯器的語法分析的內(nèi)容有了一定的了解,所以直接進行了理論的學(xué)習(xí)。雖然之前寫的詞法分析的代碼已經(jīng)完成了詞法分析的需求,也是根據(jù)DFA的原理編寫的,但是在代碼結(jié)構(gòu)上卻難以體現(xiàn),在對書上的根據(jù)已知DFA寫代碼的例子進行了詳細(xì)的研究之后,發(fā)現(xiàn)自己的代碼并沒有像書上那樣完全按照所依據(jù)的DFA各狀態(tài)轉(zhuǎn)移的關(guān)系進行編寫,所以對代碼進行了重寫,像書上一樣嚴(yán)格按照狀態(tài)之間轉(zhuǎn)移的方式進行編寫,將狀態(tài)劃分成11個狀態(tài),狀態(tài)分別按1~11進行標(biāo)注,程序也按照DFA來編寫,也實現(xiàn)了詞法分析的功能。經(jīng)過揣摩書上的例子,自己理解和掌握了怎么設(shè)計過濾注釋和分析程序中Token的DFA,于是開始根據(jù)設(shè)計好的DFA進行編碼,最后經(jīng)過調(diào)試已經(jīng)可以正確地完成詞法階段的任務(wù)了。在充分了解了語法分析需要哪些信息時,我才真正了解了詞法分析的工作內(nèi)容和目標(biāo),才知道詞法分析需要完成哪些任務(wù)獲取到哪些信息。根據(jù)DFA及自頂向下等理論修改完善代碼等這些過程。開始著手寫代碼224。明白任務(wù)的要求和內(nèi)容224。陳火旺.《程序設(shè)計語言編譯原理》(第3版).北京:、美 Alfred Ravi Sethi Jeffrey ,姜守旭譯.《編譯原理》.24 [在此處鍵入]北京:、美 Kenneth .《編譯原理及實踐》.北京:、金成植著.《編譯程序構(gòu)造原理和實現(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)[在此處
點擊復(fù)制文檔內(nèi)容
外語相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1