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

正文內(nèi)容

編譯原理課程設(shè)計ll遞歸下降分析器-預(yù)覽頁

2025-10-28 06:36 上一頁面

下一頁面
 

【正文】 降分析法的優(yōu)缺點,其優(yōu)點是簡單、直觀,易于構(gòu)造分析程序。編程的能力不是一朝一夕能鍛煉出來,堅持學(xué)習(xí),堅持編程的學(xué)習(xí),多看,多編是最好的學(xué)習(xí)和提高方法。構(gòu)成詞法分析器的一種簡單方法是用狀態(tài)轉(zhuǎn)換圖來描述源語言詞法記號的結(jié)構(gòu),然后手工把這種狀態(tài)轉(zhuǎn)換圖翻譯成為識別詞法記號的程序。附件1:參考文獻《編譯原理(第2版)》 高等教育出版社; 《C程序設(shè)計及應(yīng)用教程(第2版)》 人民教育出版社。using 。//保存標識符static List sz = new List()。//路徑,并存入datafor(int i = 0。} //分別輸出存儲在四個List中的String(“關(guān)鍵字,輸入回車”)。//輸出所有的標識符()。foreach(string id in sz){ (id)。}(“算數(shù)運算符,輸入回車”)。()。int j = 0。_39。while((a)){ temp = temp + ()。if(!(temp)){ // (”添加成功“)。(temp)。while((a)){ temp = temp + ()。.39。while((a)){ temp = temp + ()。E39。j++。a = code[j]。} } else if(a == 39。a = code[j]。} } else if(a == 39。a = code[j]。} } else if(a == 39。a = code[j]。j++。(temp)。39。*39。//(”運算符“+temp)。}} } }//判斷是不是保留字的IsKey方法static bool isKey(string key){bool flag = false。//(key+”是不是key“+flag)。// (flag+”是不是key)。詞法分析器具備預(yù)處理功能。通過此次課程設(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é)果 。通常地,源程序為高級語言(highlevel language),C語言程序,而目標則是 機器語言的目標代碼(object code),也就是可以在計算機硬件中運行的機器代碼軟件程序。功能包括:。(流程)本節(jié)主要分析程序的代碼結(jié)構(gòu)和代碼工程文件的劃分。Lexical類主要的工作是詞法分析獲取Token。,Four_Yuan,cs,,他們分別是Lexical類聲明文件、Lexical類實現(xiàn)文件、Grammer類聲明文件、Grammer類實現(xiàn)文件。同時,這也是程序的流程。Lexical類的代碼結(jié)構(gòu)和主要的成員變量和函數(shù)及其含義如下圖所示:算法的基本任務(wù)是從字符串表示的源程序中識別出具有獨立意義的單詞符號,其基本思想是[在此處鍵入]根據(jù)掃描到單詞符號的第一個字符的種類,拼出相應(yīng)的單詞符號。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標識符。amp。public static string PrintErrorList()把所有發(fā)現(xiàn)的錯誤格式化后統(tǒng)一輸出。39。直接拷貝好歹也檢查一下錯誤對于編譯原理的這次課程設(shè)計,自己經(jīng)歷了從剛開始的不懂224。完成基本功能224。充分了解了詞法分析的任務(wù)之后,就開始理論知識的學(xué)習(xí)。再后來寫報告的時候,發(fā)現(xiàn)分析出Token的那個DFA并不是最簡的,有很多多余的狀態(tài),完全可以用一個flag標志來標識,從而簡化代碼結(jié)構(gòu),于是又重寫了一次詞法分析函數(shù)scan()的代碼,將狀態(tài)縮減為5個,且不再用15來表示,而是像書上那樣分別取了名字(START、INNUM、INID、INDBSYM、DONE),同時為了簡化代碼將輸出Token到文件的部分從scan()中剝離開來,而在Lexical類中加了一個printToken()的函數(shù),使scan()函數(shù)邏輯更加清晰,使讀者能夠容易地將代碼與DFA進行查看比照。由于在編寫代碼的過程中需要確定分析是否正確或選擇多個文法中的某一個文法進行分析,有時必須探測需要的或下一個Token的類型,在這種情況下需要求First集合,在推導(dǎo)中若存在empty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進行判斷,以確定程序的走向。語法分析主要能根據(jù)遞歸向下的分析思想和C文法對詞法分析獲取的Token進行語法分析,能夠構(gòu)造出語法樹,能夠判別語法分析過程中是否出錯以及出錯位置和錯誤類型。由于以前編寫代碼都是使用JAVA語言,所以C/C++很多內(nèi)容都忘記了,通過本次的實踐,自己又重新拾起了以前的知識。通過本次課程設(shè)計掌握編譯程序調(diào)試技巧和設(shè)計編譯程序一般的原則,加深對詞法分析、語法分析、語義分析等編譯階段及實用編譯系統(tǒng)的認識。擴充var數(shù)組:VAR (:)〈下界〉和〈上界〉可用常量標識名。PL/0的目標程序為假想棧式計算機的匯編語言,與具體計算機無關(guān)。當源程序編譯正確時,PL/0編譯程序自動調(diào)用解釋執(zhí)行程序,對目標代碼進行解釋執(zhí)行,并按用戶程序的要求輸入數(shù)據(jù)和輸出運行結(jié)果。在源程序沒有錯誤編譯通過的情況下,調(diào)用類PCODE解釋程序解釋執(zhí)行生成的類PCODE代碼。詞法分析器的分析過程:調(diào)用GETSYM時,它通過GETCH過程從源程序中獲得一個字符。如果識別出其它合法的符號(比如:賦值號、大于號、小于等于號等),則把SYM則成相應(yīng)的類型。這些過程在結(jié)構(gòu)上構(gòu)成一個嵌套的層次結(jié)構(gòu)。如果是句號且分程序分析中未出錯,則是一個合法的PL/0程序,可以運行生成的代碼,否則就說明源PL/0程序是不合法的,輸出出錯提示即可。then后的語句處理完后,如果遇到else,就調(diào)用語句處理過程處理else語句后面的語句或語句塊,這時當前代碼段分配指針的位置就應(yīng)該是上面的jpc指令的轉(zhuǎn)移位置。調(diào)用條件表達式處理過程生成相應(yīng)代碼把結(jié)果放在數(shù)據(jù)棧頂,再生成條件轉(zhuǎn)移指令,轉(zhuǎn)移位置為上面記錄的CX1。// length of identifier table 標示符表的長度(容量)const int al = 10。// maximum depth of block nesting 最大允許的塊嵌套層數(shù) const int cxmax = 200。// alfa類型用于標識符 typedef enum {CONSTANT,VARIABLE,PROCEDURE,ARRAY} obj0。// function code int l。t big than amax }。}inOther。class PL0 {protected:bool listswitch,sourceEnd。// last identifier read int num。int cx。// code line vector errorString。// 保留字表symbol wsym[norw+1]。// 聲明開始、表達式開始和項開始符號集 Table table[txmax+1]。}void error(int n)。程序區(qū)void test(symset s1,symset s2,int n)。dx,int lev)。dx,int lev)。void listcode(int cx0)。void factor(symset fsys,int tx,int lev)。 dx,int lev)。// 構(gòu)造函數(shù)// 析構(gòu)函數(shù)// 出錯處理,打印出錯// 詞法分析,讀取一// 漏掉空格,讀取一// 生成目標代碼,并送入目標// 測試當前單詞符號是否// 分程序分析處理過程// 登入名字表// 查找標示符在名字表中// 常量定義處理// 變量說明處理// 列出目標代碼清單// 語句部分處理// 表達式處理// 項處理// 因子處理// 條件處理// 數(shù)組說明處理// 對目標代碼的解釋// 通過靜態(tài)鏈求出數(shù)據(jù)區(qū)的 // 保存代碼}?!? ”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[3],”const“)。strcpy(word[7],”if“)。strcpy(word[11],”repeat“)。strcpy(word[15],”while“)。留字對應(yīng)的symbol類型wsym[3]= CONSTSYM。wsym[7]= IFSYM。wsym[11]= REPEATSYM。wsym[15]= WHILESYM。memset(table,0,sizeof(table))。]= PLUS。ssym[39。/39。]= LPAREN。ssym[39。,39。]= PERIOD。ssym[39。39。strcpy(mnemonic[LOD],” lod “)。strcpy(mnemonic[JMP],” jmp “)。// (IDENT),(NUMBER),(LPAREN)。// 代碼分配指針,代碼生成模塊總在cx所指位置生成新的代碼ll= 0。// 引入此變量是出于程序性能考慮 codeNo=0。sprintf(s,”第 %d 行:“,codeNo)。int i,j,k。// cls space and tab if(isalpha(ch))// id or reserved word {k=0。} getch()。else { do{a[kk]= 39。} strcpy(id,a)。if(strcmp(id, word[k])j= k1。} else if(isdigit(ch))// number { k= 0。039。if(k nmax)error(30)。if(ch == 39。} elsesym= NUL。if(ch == 39。} elsesym= GTR。sourceEnd=true。codeNo++。cc= cc+1。code[cx].a= z。symset::iterator it。//s1=s1+s2while((sym)==())getsym()。// initial table index int cx0。gen(JMP,0,0)。while(sym == COMMA){}getsym()。}while(sym==IDENT)。vardeclaration(tx,dx,lev)。} while(sym ==PROCSYM)// 處理過程的聲明 { getsym()。if(sym ==SEMICOLON)getsym()。block(lev+1,tx,tmp)。i((symbol)i)。(IDENT)。table[tx0].= cx。symset tmp=statbegsys。gen(OPR,0,0)。}// block end// 登入名字表void PL0::enter(obj0 k,int amp。table[tx].kind=k。break。break。break。while(strcmp(table[i].name,id)!=0)i。dx,int lev){ if(sym == IDENT){getsym()。getsym()。}elseerror(3)。dx,int lev){ if(sym == IDENT){enter(VARIABLE,tx,dx,lev)。tx,intamp。getsym()。if(sym == NUMBER || sym == CONSTSYM){downscript = num。getsym()。int i,cx1,cx2。i= 0。expression(fsys,tx,lev)。if(sym!=LPAREN)error(34)。if(i==0)error(35)。}while(sym == COMMA)。} else if(sym == WRITESYM){ getsym()。t((symbol)t)。if(sym!=RPAREN)error(33)。if(sym!=IDENT)error(14)。elseerror(15)。for(int i = THENSYM。elseerror(16)。statement(tmp,tx,lev)。cx2=cx。code[cx2].a=cx。i((symbol)i)。while((sym)!=()){if(sourceEnd)return。}elseerror(10)。if(sourceEnd)re
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1