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

正文內(nèi)容

編譯原理課程設計ll遞歸下降分析器(完整版)

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

下一頁面
  

【正文】 名:20123977廖峭 分工:詞法分析,錯誤處理 組員2學號及姓名:20123959郭天龍分工:符號表生成,語義動作插入,操作界面[在此處鍵入]摘要編譯原理課程設計是通過C語言編譯器相關(guān)子系統(tǒng)的設計,進一步加深對編譯器構(gòu)造的理解;第一部分詞法分析,設計各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設計種別碼,制作掃描器識別一個個單詞,返回值為識別碼的序號,返回Token序列。i 。j++。+39。=39。if(!(temp)){ //(”添加成功關(guān)系==“)。if(!(temp)){ //(”添加成功標識符==“)。if(!(temp)){ //(”添加成功標識符==“)。e39。j++。j++。a = code[j]。temp = ”“。foreach(string id in ys){ (id)。}(“數(shù)字,輸入回車”)。i++){ (“第” +(i + 1)+ “行code: ” + (i))。static List key = new List()。把自然語言構(gòu)造成正規(guī)式,把正規(guī)式構(gòu)造成有限自動機NFA,然后根據(jù)子集構(gòu)造法把有限自動機構(gòu)造成無限自動機DFA,根據(jù)極小化DFA狀態(tài)數(shù)算法把DFA構(gòu)造成最簡DFA,其次根據(jù)最簡DFA畫出轉(zhuǎn)換表,根據(jù)轉(zhuǎn)換表畫出裝換圖,最后根據(jù)裝換圖就可以編寫詞法分析器。課程設計雖然只有短短的一周,但讓我認識到學習好編譯原理,是對程序設計和編譯的一個很好的進化橋梁和奠基石。這也給做編譯原理課程設計帶來了困難?!眪void f(){{} cout^”i”} } elseif(inputstream[temp]==39?!?TE39。){} else if(inputstream[temp]==39。void t()。上述算法表達式文法屬于比較典型的遞歸下降語法分析。a1|a2|K|an,則FIRST(ai)199。這些事情既麻煩又費時間,所以,最好應設法消除回溯。而自上而下這種方法是帶“回溯”的,且存在許多困難和缺點。如:程序設計語言中的表達式,各種說明和語句乃至全部源程序,指出其中的語法錯誤;必要時,可生成內(nèi)部形式,便于下一階段處理。因此,使用自上而下分析法必須消除文法的左遞歸性。由于上述原因,我們需要把原算術(shù)表達式改寫為LL(1)文法,LL(1)文法的文法條件如下: 文法不含左遞歸。這樣的一個分析程序稱為遞歸下降分析器。//數(shù)組下標 int right。coutTE39。)39。/39。我覺得編譯原理這門課是一門非常難學的課程,它涉及文法、詞法分析、語法分析屬性文法和語義分析等等一系列內(nèi)容,課本里的內(nèi)容和定義也非常的抽象且枯燥。但是要注意的是,在編寫代碼時,要根據(jù)LL(1)文法的工作原理去設計。參考文獻《編譯原理》 機械工業(yè)出版社出版Alfred Ravi Sethi Jeffrey D,Ullman著李建中 姜守旭等譯《程序設計語言 編譯原理(第三版)》 國防工業(yè)出版社出版陳火旺 劉春林 譚慶平趙克佳 劉越 著第二篇:《編譯原理》課程設計報告詞法分析器201X201X學年第x學期《編譯原理》課程設計報告院 系: 計算機科學與技術(shù) 班 級: XX級XX 班 學生姓名: XXXXXX 學 號: XXXXXXXX 指導老師: XXXXXX計算機科學與技術(shù)學院監(jiān)制20XX年X月目錄 附件1:參考文獻 附件2:核心源代碼(1)編寫詞法分析器(2)加深對詞法分析器工作原理的了解和認識編寫詞法分析器,詞法分析器能夠識別關(guān)系算符,詞法分析器能夠識別標識符和關(guān)鍵字,詞法分析器能夠識別無符號數(shù)。using 。//保存數(shù)字運算符//數(shù)字,標識符,空白,關(guān)系符,運算符static void Main(string[] args){string[] date = (“d:”)。}(“標識符,輸入回車”)。foreach(string id in gx){ (id)。string temp = “。a = code[j]。if(!(temp)){ //(”添加成功標識符==“)。} //判斷是否是小數(shù)if((39。} //判讀是否是科學記數(shù)法if((39。j++。j++。j++。j++。if(!(temp)){ //(”添加成功標識符==“)。 || a == 39。} } else{ j++。} //(key+”是不是key“)。我們還做了附加功能,即編譯后端,有中間代碼優(yōu)化,生成目標代碼匯編語言。將詞法分析器設計成供語法分析器調(diào)用的子程序。本程序采用C語言以面向?qū)ο蟮乃枷刖帉?,程序分為幾部分:詞法分析(Lexical),語法分析(Grammer),目標代碼生成(ObjectCode)。然后Grammer類的語法分析程序就根據(jù)tokenList中的Token進行語法分析,生成語法樹,最后打印語法樹。關(guān)鍵字作為特殊標識符處理,把它們預先安排在一張表格中(稱為關(guān)鍵字表),當掃描程序識別出標識符時,查關(guān)鍵字表。 數(shù)據(jù)結(jié)構(gòu) [在此處鍵入]public static void AddErrorMessage(int lineno,string content)函數(shù)用作在發(fā)現(xiàn)錯誤時保存錯誤信息以及行號。陳火旺.《程序設計語言編譯原理》(第3版).北京:、美 Alfred Ravi Sethi Jeffrey ,姜守旭譯.《編譯原理》.24 [在此處鍵入]北京:、美 Kenneth .《編譯原理及實踐》.北京:、金成植著.《編譯程序構(gòu)造原理和實現(xiàn)技術(shù)》.北京:、體會和建議。在充分了解了語法分析需要哪些信息時,我才真正了解了詞法分析的工作內(nèi)容和目標,才知道詞法分析需要完成哪些任務獲取到哪些信息。由于C語言給出的文法有左遞歸存在,于是自己將存在左遞歸的文法改寫成EBNF的形式,并據(jù)此進行代碼編寫。如:以前在編譯原理課上雖然知道First集合和Follow集合怎么求的,卻不知道First集合和Follow集合到底是干什么的,通過編寫程序自己明白了他們的實際作用,使得自己不僅知其然還知其所以然,從而使得自己加深了對知識點的理解和掌握。2)對PL/0語言進行下列擴充(1)擴充一維整型數(shù)組。用表格管理程序建立變量、常量和過程表示符的說明與引用之間的信息聯(lián)系。GETCH過程中使用了行緩沖區(qū)技術(shù)以提高程序運行效率。語法分析主要由分程序分析過程(BLOCK)、參數(shù)變量分析過程(ParaDeclaration)、參數(shù)變量處理過程(ParaGetSub)、數(shù)組處理過程(ParaGetSub)、常量定義分析過程(ConstDeclaration)、變量定義分析過程(Vardeclaration)、語句分析過程(Statement)、表達式處理過程(Expression)、項處理過程(Term)、因子處理過程(Factor)和條件處理過程(Condition)構(gòu)成。然后調(diào)用語句處理過程處理 then語句后面的語句或語句塊。// reserved words 保留字的個數(shù)const int txmax = 100。// symobl類型標識了不同類型的詞匯typedef char alfa[al+1]。// displacement address,cann39。} Table。// line length int kk,err。// destination code arrayalfa word[norw+1]。~PL0(){fclose(fin),fclose(fout)。tx,int amp。dx,int lev)。 tx,intamp?!? ”error 0011: 標識符沒說明“, ”error 0012: 賦值語句中,賦值號左部標識符屬性應是變量“, ”error 0013: 賦值語句左部標識符應是賦值號:=“, ”error 0014: call后應為標識符“, ”error 0015: call后標識符屬性應為過程“, ”error 0016: 條件語句中丟了then“, ”error 0017: 丟了end或。strcpy(word[6],”end“)。strcpy(word[14],”var“)。wsym[6]= ENDSYM。wsym[14]= VARSYM。+39。ssym[39。]= RPAREN。.39。ssym[39。strcpy(mnemonic[INT],” int “)。// 行緩沖區(qū)指針cx= 0。// 出錯處理,打印出錯位置和出錯代碼 void PL0::error(int n){ char s[10]。||ch==9)getch()。if(k = kk)kk = k。// 判斷是否是關(guān)鍵字(二分搜索)do{ k=(i+j)/ 2。do{num= 10 * num + ch39。){ getch()。){ getch()。} }// 漏掉空格,讀取一個字符void PL0::getch(){ if(cc == ll){if(feof(fin)){if(sym!=PERIOD)error(25)。} ch= line[cc]。if((sym)==()){error(n)。// data allocation index int tx0。do{constdeclaration(tx,dx,lev)。while(sym == COMMA){getsym()。} elseerror(4)。for(int i= IDENT。code[table[tx0].].a= cx。statement(tmp,tx,lev)。strcpy(table[tx].name,id)。dx++。i= tx。sym{if(sym ==BECOMES)error(1)。tx,intamp。if(sym == NUMBER || sym == CONSTSYM){if(num == 0){upscript = num。else { enter(ARRAY,tx,dx,downscript+1)。else if(table[i].kind!=VARIABLE){error(12)。} else if(sym == READSYM){ getsym()。}getsym()。for(int t=RPAREN。} else if(sym ==CALLSYM){ getsym()。symset tmp=fsys。(ELSESYM)。statement(fsys,tx,lev)。(SEMICOLON)。i((symbol)i)。if(sym ==SEMICOLON||sym ==ENDSYM)getsym()。} } else if(sym ==BEGINSYM){ getsym()。getsym()。i((symbol)i)。else {i= position(id,tx)。expression(tmp,tx,lev)。if(sym!= RPAREN){error(33)。elsedo{getsym()。}getsym()。} // 列出目標代碼清單void PL0::listcode(int cx0)//list code generated for this block { int i。}elseerror(32)。getsym()。if(sym == NUMBER){enter(CONSTANT,tx,dx,lev)。return i。case PROCEDURE:table[tx].=lev。switch(k){ case CONSTANT:if(numamax){error(31)。// return symset s2。// start adr of code table[tx0].=dx。test(tmp,fsys,6)。elseerror(5)。}if(sym ==SEMICOLON)getsym()。constdeclaration(tx,dx,lev)。// initial code indexdx= 3。for(it=()。}// 生成目標代碼,并送入目標程序區(qū)void PL0::gen(fct x,int y,int z){ if(cx cxmax){coutreturn。return。=39。=39。k= k+1。if(strcmp(id,word[k])=0)i= k+1。 39。memset(a,0,al+1)。(s+errStr[n])。// 行緩沖區(qū)長度ch= 39。strcpy(mnemonic[JPC],” jpc “)。]= SEMICOLON。// 初始化保留字表中每一個保// 初始化一些符號對應的symbolssym[39。=39。]= SLASH。類型表ssym[39。wsym[16]= WRITESYM。wsym[8]= ODDSYM。strcpy(word[16],”write“)。strcpy(word[8],”odd“)。// PL0構(gòu)造函數(shù)PL0::PL0(char* source,char*destination){ listswitch=true,sourceEnd=false。void interpret()。void statement(symset fsys,int tx,int lev)。int position(alfa id,int tx)。位置和出錯代碼void getsym()。// 保留字表中每一個保留字對應的symbol類型symbol ssym[100]。// code allocation index int codeNo。char ch。// 類PCODE指令類型,包含三個字段:指令f、層差l和另一個操作數(shù)a/******************************************* * lit 0,a: load con
點擊復制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1