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

正文內(nèi)容

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

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

下一頁面
  

【正文】 irst集合和Follow集合、遞歸向下分析方法以及編程語言方面的知識,所以,通過本次的課程設(shè)計的實踐,使得自己對編譯原理這門課的許多知識點有了更加深刻和具體的理解,而不再只限制于做題。使學生能將編譯理論與實際應用結(jié)合起來,提高學生軟件開發(fā)的能力。PL/0的編譯程序和目標程序的解釋執(zhí)行程序都是用PASCAL語言書寫的,因此PL/0語言可在配備PASCAL語言的任何機器上實現(xiàn)。詞法分析子程序分析:詞法分析子程序名為GETSYM,功能是從源程序中讀出一個單詞符號(TOTAKEN),把它的信息放入全局變量 SYM、ID和NUM中,字符變量放入CH中,語法分析器需要單詞時,直接從這三個變量中獲得。如果遇到不合法的字符,把SYM置成NUL。ifthenelse語句的處理:按if語句的語法,首先調(diào)用邏輯表達式處理過程處理if語句的條件,把相應的真假值放到數(shù)據(jù)棧頂。五、相關(guān)代碼及運行結(jié)果實驗代碼; : include include include include include include ifndef WIRTH_ZYC_ define WIRTH_ZYC_ using namespace std。// size of code array 類PCODE目標代碼數(shù)組長度(可容納代碼行數(shù))const int lineLength = 82。// level,cann39。int val。// last number readint cc。// error array alfa a。// 符號表FILE* fin,*fout。合法void block(int lev,int tx,symset fsys)。void vardeclaration(intamp。void condition(symset fsys,int tx,int lev)。endif : include “”// 錯誤字符串數(shù)組string PL0::errStr[]={“,”error 0001: 常數(shù)說明中“=”寫成“:=”“, ”error 0002: 常數(shù)說明中的“=”后應為數(shù)字“, ”error 0003: 常數(shù)說明中的標識符后應是“=”“, ”error 0004: const,var,procedure后應為標識符“, ”error 0005: 漏掉了‘,’或‘。strcpy(word[4],”do“)。strcpy(word[12],”then“)。wsym[4]= DOSYM。wsym[12]= THENSYM。memset(line,0,sizeof(line))。*39。ssym[39。]= COMMA。39。strcpy(mnemonic[STO],” sto “)。// 初始化項開始符號集合err= 0。// code line =fopen(source,”r“)。while(ch ==39。if(sourceEnd)return。i= 1。num= 0。} else if(ch == 39。} else if(ch == 39。} else// end of extra stuff { sym= ssym[ch]。ll=strlen(line)。cx= cx+1。} }//test end// 分程序分析處理過程void PL0::block(int lev,int tx,symset fsys){ if(sourceEnd)return。if(levlevmax)error(32)。if(sym == VARSYM)// 處理變量聲明 { getsym()。if(sym ==IDENT){enter(PROCEDURE,tx,dx,lev)。if(sym == SEMICOLON){getsym()。test(tmp,declbegsys,7)。for(int i=SEMICOLON。tx,int amp。case VARIABLE:table[tx].=lev。} }//enter end// 查找標示符在名字表中的位置int PL0::position(alfa id,int tx)//find identifier id in table { int i。if(sym=EQLamp。} elseerror(4)。dx,int lev){int upscript=0,downscript=0。getsym()。if(sym ==IDENT){i= position(id,tx)。if(sym!= SEMICOLON)error(10)。else{gen(OPR,0,16)。if(sym==LPAREN){do{getsym()。elsegetsym()。getsym()。cx1= cx。gen(JMP,0,0)。statement(tmp,tx,lev)。tmp=fsys。getsym()。for(int i=SEMICOLON。if(sym == ELSESYM){getsym()。if(sym == THENSYM)getsym()。else if(table[i].kind = PROCEDURE)gen(CAL,levtable[i].,table[i].)。}while(sym==COMMA)。}elsegetsym()。elsei=0。elseerror(13)。icout// 語句部分處理void PL0::statement(symset fsys,int tx,int lev){ if(sourceEnd)return。elseerror(32)。}//vardeclaration end// 數(shù)組說明處理void PL0::arraydeclaration(intamp。}elseerror(2)。tx,intamp。case ARRAY:table[tx]. = lev。}table[tx].=num。listcode(cx0)。gen(INT,0,dx)。}symset tmp=statbegsys。(SEMICOLON)。}while(sym==IDENT)。elseerror(5)。// 表指針table[tx].= cx。it++)(*it)。code[cx].l= y。fgets(line,lineLength,fin)。getch()。getch()。}while(isdigit(ch))。elsesym= IDENT。}while(kk k)。k= k+1。//error count }//error end // 詞法分析,讀取一個單詞void PL0::getsym(){ if(sourceEnd)return。// last character read}kk= al。// 初始化聲明開始符號集合 (BEGINSYM),(CALLSYM),(IFSYM),(WHILESYM)。// 初始化類PCODE指令助記符表strcpy(mnemonic[OPR],” opr “)。]= NEQ。ssym[39。(39。]= MINUS。memset(ssym,0,100*sizeof(symbol))。wsym[10]= READSYM。wsym[2]= CALLSYM。strcpy(word[10],”read“)。// 初始化存儲保留字strcpy(word[2],”call“)?;刂穠oid SaveCode()。void term(symset fsys,int tx,int lev)。tx,intamp。個字符void gen(fct x,int y,int z)。// 類PCODE指令助記符表symset declbegsys,statbegsys,facbegsys。// error stringchar line[lineLength]。// last symbol read alfa id。union {struct{int level,adr,size。struct instruction{ fct f。// maximum address 尋址空間const int levmax = 3。然后通過遞歸調(diào)用語句分析過程分析,直到遇到until保留字,如果未對應until則出錯。因此,本編譯程序在運行的時候,通過主程序中調(diào)用分程序處理過程block來分析分程序部分(分程序分析過程中還可能會遞歸調(diào)用block過程),然后,判斷最后讀入的符號是否為句號。如果Getch獲得的字符是數(shù)字,則繼續(xù)用Getch獲取數(shù)字,并把它們拼成一個整數(shù)或?qū)崝?shù),然后把SYM置為 INTEGER或REAL,并把拼成的數(shù)值放入NUM變量。語法分析的同時,提供了出錯報告和出錯恢復的功能。三、實驗原理PL/0語言可以看成PASCAL語言的子集,它的編譯程序是一個編譯解釋執(zhí)行系統(tǒng)。[第四篇:編譯原理課程設(shè)計報告武 漢 紡 織 大 學編譯原理課程設(shè)計實驗報告學院:數(shù)學與計算機 專業(yè):計算機 姓名: 班級: 學號: 編譯原理編譯原理課設(shè)報告一、實驗目的加強對編譯程序的整體認識和了解,鞏固《編譯原理》課程所學知識。首先最基本的成果是完成了課程設(shè)計的任務,實現(xiàn)了編譯器的詞法分析和語法分析階段的功能,詞法分析主要能過濾注釋、分析出語法分析階段需要的Token并滿足語法階段的所有要求,能夠判別詞法分析階段是否出錯和出錯類型和位置。雖然之前寫的詞法分析的代碼已經(jīng)完成了詞法分析的需求,也是根據(jù)DFA的原理編寫的,但是在代碼結(jié)構(gòu)上卻難以體現(xiàn),在對書上的根據(jù)已知DFA寫代碼的例子進行了詳細的研究之后,發(fā)現(xiàn)自己的代碼并沒有像書上那樣完全按照所依據(jù)的DFA各狀態(tài)轉(zhuǎn)移的關(guān)系進行編寫,所以對代碼進行了重寫,像書上一樣嚴格按照狀態(tài)之間轉(zhuǎn)移的方式進行編寫,將狀態(tài)劃分成11個狀態(tài),狀態(tài)分別按1~11進行標注,程序也按照DFA來編寫,也實現(xiàn)了詞法分析的功能。開始著手寫代碼224。測試錯誤檢測,程序缺少分號,錯誤列表中顯示該行缺少語句結(jié)束標志39。語法分析的功能是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語法短語,如“程序”,“語句”,“表達式” 數(shù)據(jù)結(jié)構(gòu)下圖為實現(xiàn)語法分析的類Grammar,屬性與方法的作用都已說明 在此處鍵入]下面終結(jié)符與非終結(jié)符意義B程序開始Z 數(shù)據(jù)類型,如int,char,float等V 標識符S 語句P 語句塊E 加減算術(shù)表達式D 逗號表達式T 乘除算術(shù)表達式C 關(guān)系表達式L 邏輯表達式Q 標識符或圓括號e 表示空i 表示標識符 a)函數(shù)文法BZV()S[[在此處鍵入]b)語句塊文法PSP|eS{P} c)語句文法表達式語句文法SV=Egoto語句文法Si:SSgoto iif語句文法Sif(E)S[else S]while語句文法Swhile(E)S聲明語句文法SZVDD,VD|=ED|e d)表達式文法ET|E+T|ETTF|T*F|T/FCC|CL|C==C|C=LLQ|Lamp。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ù)服務。工程文件總體上是按照九個類的格局分為十個文件,分別是九個類的聲明文件和實現(xiàn)文件。若語法正確,則用語法制導翻譯法進行語義翻譯;生成并打印出語法樹;若語法錯誤,要求指出出錯性質(zhì)和出錯位置(行號)。編譯器將源程序(source language)編寫的程序作為輸入,翻譯產(chǎn)生目標語言(target language)機器代碼的等價程序。將詞法分析器設(shè)計成供語法分析器調(diào)用的子程序。i++)if(keys[i] == key){ flag = true。a = code[j]。 || a == 39。){ temp = temp + ()。(temp)。(temp)。(temp)。)){ temp = temp + ()。a = code[j]。a = code[j]。} if(isKey(temp)){//(”保留字:“+temp)。if((a)|| a == 39。}(“輸入回車退出”)。()。analysisByLine(date[i])。//保存關(guān)鍵字static List bsf = new List()。通過本次試驗,不僅僅是我學會了C基礎(chǔ)知識,而且還是我對詞法分析器有了更深入的認識,雖然在編寫詞法分析器過程中遇到了很多困難,例如:C語言不熟悉,對此法分析器的工作原理分析的不透徹,但在老師和同學的幫助下,我有了很大的提高,通過不斷的努力最終順利的完成了課程設(shè)計,很感謝幫助我的XX同學和XX老師。今后學習的日子還很長,希望通過這次編譯原理的課程設(shè)計,不僅對編程語言的進一步復習,還是對更深層次的學習作一個簡單的準備。本次課程設(shè)計,我選的課程設(shè)計題目是LL(1)遞歸下降分析器,這個題目涉及的內(nèi)容有關(guān)課本第四章 語法分析——自上而下分析里面的內(nèi)容。(39?!盕T39。39。void t1()。需要先將原算術(shù)表達式方法改寫為LL(1)文法為:ETE’E’+TE’|TE’| ε TFT’
點擊復制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1