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

正文內(nèi)容

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

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

下一頁面
  

【正文】 while((sym)!=()){if(sourceEnd)return。statement(tmp,tx,lev)。if(sym!=IDENT)error(14)。}while(sym == COMMA)。i= 0。getsym()。getsym()。break。gen(OPR,0,0)。i((symbol)i)。vardeclaration(tx,dx,lev)。// initial table index int cx0。cc= cc+1。if(ch == 39。039。else { do{a[kk]= 39。sprintf(s,”第 %d 行:“,codeNo)。strcpy(mnemonic[JMP],” jmp “)。]= PERIOD。/39。wsym[15]= WHILESYM。strcpy(word[15],”while“)?!? ”error 0018: while型循環(huán)語句中丟了do“, ”error 0019: 語句后的標(biāo)識符不正確“, ”error 0020: 應(yīng)為關(guān)系運算符“, ”error 0021: 表達式內(nèi)標(biāo)識符屬性不能是過程“, ”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語句括號中標(biāo)識符不是變量“, ”error 0033: else附近錯誤“ , ”error 0034: repeat附近錯誤“}。void listcode(int cx0)。}void error(int n)。int cx。t big than amax }。// length of identifier table 標(biāo)示符表的長度(容量)const int al = 10。這些過程在結(jié)構(gòu)上構(gòu)成一個嵌套的層次結(jié)構(gòu)。當(dāng)源程序編譯正確時,PL/0編譯程序自動調(diào)用解釋執(zhí)行程序,對目標(biāo)代碼進行解釋執(zhí)行,并按用戶程序的要求輸入數(shù)據(jù)和輸出運行結(jié)果。由于以前編寫代碼都是使用JAVA語言,所以C/C++很多內(nèi)容都忘記了,通過本次的實踐,自己又重新拾起了以前的知識。充分了解了詞法分析的任務(wù)之后,就開始理論知識的學(xué)習(xí)。public static string PrintErrorList()把所有發(fā)現(xiàn)的錯誤格式化后統(tǒng)一輸出。同時,這也是程序的流程。功能包括:。// (flag+”是不是key)。*39。a = code[j]。a = code[j]。E39。(temp)。int j = 0。//輸出所有的標(biāo)識符()。using 。通過本次課程設(shè)計清楚地了解到遞歸下降分析法的優(yōu)缺點,其優(yōu)點是簡單、直觀,易于構(gòu)造分析程序。){} else cout/FT39?!眪void t(){} if(inputstream[temp]==39。概要設(shè)計編程實現(xiàn)給定算術(shù)表達式的遞歸下降分析器。其次,由于回溯,就碰到一大堆麻煩問題。按照語法分析樹的建立方法,我們可以粗略地把語法分析辦法分成兩類,一類是自上而下分析,另一類是自下而上分析法。即,若A174。void e1()。cout^”TE39。本人因為上課無法做到打醒十二分專心聽課,經(jīng)常會分神,所以學(xué)習(xí)的效果也不怎么好。詞法分析器的任務(wù)是把構(gòu)成源程序的字符流翻譯成詞法記號流。i 。()。j++。)){ temp = temp + ()。} }}// (”數(shù)字:“+temp)。// (”關(guān)系符“+temp)。}} else { if(a == 39。for(int i = 0。、體會和建議。Grammer類的主要工作是根據(jù)Lexical類詞法分析之后的Token進行語法分析,生成語法樹,最后并輸出語法樹。(2)程序中需要用到的主要變量為type和number 掃描子程序的算法思想:首先設(shè)置3個變量: [在此處鍵入]①token用來存放構(gòu)成單詞符號的字符串; ②number用來整型單詞;③type用來存放單詞符號的種別碼。明白任務(wù)的要求和內(nèi)容224。在編寫過程中,還有一類問題,就是存在公共左因子,如文法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ù)中去。(2)擴充條件語句的功能使其為:IFTHEN[ELSE](3)增加repeat重復(fù)語句: REPEAT{。如果這個字符是字母,則繼續(xù)獲取字符或數(shù)字,最終可以拼成一個單詞,查保留字表,如果查到為保留字,則把SYM變量賦成相應(yīng)的保留字類型值;如果沒有查到,則這個單詞應(yīng)是一個用戶自定義的標(biāo)識符(可能是變量名、常量名或是過程的名字),把SYM置為IDENT,把這個單詞存入ID變量。通過前面記錄下的jpc指令的位置,把它的跳轉(zhuǎn)位置改成當(dāng)前的代碼段指針位置,否則沒遇到else,那么此時的當(dāng)前代碼段分配指針的位置也是上面jpc指令的轉(zhuǎn)移位置,也是通過前面記錄下的jpc位置指令的位置,把它的跳轉(zhuǎn)到當(dāng)前的代碼段指針位置。// 三種標(biāo)識符的類型 typedef enum {LIT,OPR,LOD,STO,CAL,INT,JMP,JPC} fct。char ch。// 保留字表中每一個保留字對應(yīng)的symbol類型symbol ssym[100]。int position(alfa id,int tx)。void interpret()。strcpy(word[8],”odd“)。wsym[8]= ODDSYM。類型表ssym[39。=39。]= SEMICOLON。// 行緩沖區(qū)長度ch= 39。memset(a,0,al+1)。if(strcmp(id,word[k])=0)i= k+1。=39。return。for(it=()。constdeclaration(tx,dx,lev)。elseerror(5)。// start adr of code table[tx0].=dx。switch(k){ case CONSTANT:if(numamax){error(31)。return i。getsym()。} // 列出目標(biāo)代碼清單void PL0::listcode(int cx0)//list code generated for this block { int i。elsedo{getsym()。expression(tmp,tx,lev)。i((symbol)i)。} } else if(sym ==BEGINSYM){ getsym()。i((symbol)i)。statement(fsys,tx,lev)。symset tmp=fsys。for(int t=RPAREN。} else if(sym == READSYM){ getsym()。else { enter(ARRAY,tx,dx,downscript+1)。tx,intamp。i= tx。strcpy(table[tx].name,id)。code[table[tx0].].a= cx。} elseerror(4)。do{constdeclaration(tx,dx,lev)。if((sym)==()){error(n)。} }// 漏掉空格,讀取一個字符void PL0::getch(){ if(cc == ll){if(feof(fin)){if(sym!=PERIOD)error(25)。){ getch()。// 判斷是否是關(guān)鍵字(二分搜索)do{ k=(i+j)/ 2。||ch==9)getch()。// 行緩沖區(qū)指針cx= 0。ssym[39。]= RPAREN。+39。wsym[6]= ENDSYM。strcpy(word[6],”end“)。 tx,intamp。tx,int amp。// destination code arrayalfa word[norw+1]。} Table。// symobl類型標(biāo)識了不同類型的詞匯typedef char alfa[al+1]。然后調(diào)用語句處理過程處理 then語句后面的語句或語句塊。GETCH過程中使用了行緩沖區(qū)技術(shù)以提高程序運行效率。2)對PL/0語言進行下列擴充(1)擴充一維整型數(shù)組。由于C語言給出的文法有左遞歸存在,于是自己將存在左遞歸的文法改寫成EBNF的形式,并據(jù)此進行代碼編寫。陳火旺.《程序設(shè)計語言編譯原理》(第3版).北京:、美 Alfred Ravi Sethi Jeffrey ,姜守旭譯.《編譯原理》.24 [在此處鍵入]北京:、美 Kenneth .《編譯原理及實踐》.北京:、金成植著.《編譯程序構(gòu)造原理和實現(xiàn)技術(shù)》.北京:、體會和建議。關(guān)鍵字作為特殊標(biāo)識符處理,把它們預(yù)先安排在一張表格中(稱為關(guān)鍵字表),當(dāng)掃描程序識別出標(biāo)識符時,查關(guān)鍵字表。本程序采用C語言以面向?qū)ο蟮乃枷刖帉懀绦蚍譃閹撞糠郑涸~法分析(Lexical),語法分析(Grammer),目標(biāo)代碼生成(ObjectCode)。我們還做了附加功能,即編譯后端,有中間代碼優(yōu)化,生成目標(biāo)代碼匯編語言。} } else{ j++。if(!(temp)){ //(”添加成功標(biāo)識符==“)。j++。j++。} //判斷是否是小數(shù)if((39。a = code[j]。foreach(string id in gx){ (id)。//保存數(shù)字運算符//數(shù)字,標(biāo)識符,空白,關(guān)系符,運算符static void Main(string[] args){string[] date = (“d:”)。參考文獻《編譯原理》 機械工業(yè)出版社出版Alfred Ravi Sethi Jeffrey D,Ullman著李建中 姜守旭等譯《程序設(shè)計語言 編譯原理(第三版)》 國防工業(yè)出版社出版陳火旺 劉春林 譚慶平趙克佳 劉越 著第二篇:《編譯原理》課程設(shè)計報告詞法分析器201X201X學(xué)年第x學(xué)期《編譯原理》課程設(shè)計報告院 系: 計算機科學(xué)與技術(shù) 班 級: XX級XX 班 學(xué)生姓名: XXXXXX 學(xué) 號: XXXXXXXX 指導(dǎo)老師: XXXXXX計算機科學(xué)與技術(shù)學(xué)院監(jiān)制20XX年X月目錄 附件1:參考文獻 附件2:核心源代碼(1)編寫詞法分析器(2)加深對詞法分析器工作原理的了解和認(rèn)識編寫詞法分析器,詞法分析器能夠識別關(guān)系算符,詞法分析器能夠識別標(biāo)識符和關(guān)鍵字,詞法分析器能夠識別無符號數(shù)。我覺得編譯原理這門課是一門非常難學(xué)的課程,它涉及文法、詞法分析、語法分析屬性文法和語義分析等等一系列內(nèi)容,課本里的內(nèi)容和定義也非常的抽象且枯燥。)39。//數(shù)組下標(biāo) int right。由于上述原因,我們需要把原算術(shù)表達式改寫為LL(1)文法,LL(1)文法的文法條件如下: 文法不含左遞歸。如:程序設(shè)計語言中的表達式,各種說明和語句乃至全部源程序,指出其中的語法錯誤;必要時,可生成內(nèi)部形式,便于下一階段處理。這些事情既麻煩又費時間,所以,最好應(yīng)設(shè)法消除回溯。上述算法表達式文法屬于比較典型的遞歸下降語法分析。){} else if(inputstream[temp]==39?!眪void f(){{} cout^”i”} } elseif(inputstream[temp]==39。課程設(shè)計雖然只有短短的一周,但讓我認(rèn)識到學(xué)習(xí)好編譯原理,是對程序設(shè)計和編譯的一個很好的進化橋梁和奠基石。static List key = new List()。}(“數(shù)字,輸入回車”)。temp = ”“。j++。e39。if(!(temp)){ //(”添加成功標(biāo)識符==“)。=39。j++。} } }第三篇:編譯原理課程設(shè)計課 程 設(shè) 計 報 告設(shè)計題目:一個簡單文法的編譯器前端的設(shè)計與實現(xiàn)班級: 計算機1206 組長學(xué)號:201239 組長姓名:閆智宣 指導(dǎo)教師:李曉華 設(shè)計時間:2014年12月[在此處鍵入]設(shè)計分工組長學(xué)號及姓名: 20123974閆智宣分工:語法分析,四元式生成,目標(biāo)代碼優(yōu)化及生成 組員1學(xué)號及姓名:20123977廖峭 分工:詞法分析,錯誤處理 組員2學(xué)號及姓名:20123959郭天龍分工:符號表生成,語義動作插入,操作界面[在此處鍵入]摘要編譯原理課程設(shè)計是通過C語言編譯器相關(guān)子系統(tǒng)的設(shè)計,進一步加深對編譯器構(gòu)造的理解;第一部分詞法分析,設(shè)計各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計種別碼,制作掃描器識別一個個單詞,返回值為識別碼的序號,返回Token序列。(2)語法分析要求用學(xué)習(xí)過的自底向上或自頂向下的分析方法等,實現(xiàn)對表達式、各種說明語句、控制語句進行語法分析。詞法分析階段的代碼被封裝成一個類——Lexical,Token中主要是Lexical類的聲明代碼。 目標(biāo)代碼模塊目標(biāo)代碼生成把優(yōu)化后的中間代碼變換成目標(biāo)代碼,此處的目標(biāo)代碼為匯編代碼,采用單
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1