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

正文內(nèi)容

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

2024-11-14 22:27本頁面
  

【正文】 // 檢測一個單詞長度 do{ if(k al){a[k]= ch。// cls space and tab if(isalpha(ch))// id or reserved word {k=0。 39。int i,j,k。err= err+1。sprintf(s,”第 %d 行:“,codeNo)。fout=fopen(destination,”w“)。// 引入此變量是出于程序性能考慮 codeNo=0。 39。// 代碼分配指針,代碼生成模塊總在cx所指位置生成新的代碼ll= 0。cc= 0。// (IDENT),(NUMBER),(LPAREN)。(CONSTSYM),(VARSYM),(PROCSYM)。strcpy(mnemonic[JMP],” jmp “)。strcpy(mnemonic[CAL],” cal “)。strcpy(mnemonic[LOD],” lod “)。strcpy(mnemonic[LIT],” lit “)。39。]= GTR。ssym[39。39。]= PERIOD。ssym[39。,39。]= EQL。ssym[39。)39。]= LPAREN。ssym[39。/39。]= TIMES。ssym[39。39。]= PLUS。ssym[39。memset(table,0,sizeof(table))。memset(code,0,sizeof(code))。wsym[15]= WHILESYM。wsym[13]= UNTILSYM。wsym[11]= REPEATSYM。wsym[9]= PROCSYM。wsym[7]= IFSYM。wsym[5]= ELSESYM。留字對應(yīng)的symbol類型wsym[3]= CONSTSYM。wsym[1]= BEGINSYM。strcpy(word[15],”while“)。strcpy(word[13],”until“)。strcpy(word[11],”repeat“)。strcpy(word[9],”procedure“)。strcpy(word[7],”if“)。strcpy(word[5],”else“)。strcpy(word[3],”const“)。strcpy(word[1],”begin“)。“, ”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附近錯誤“}。’“, ”error 0006: 過程說明后的符號不正確(應(yīng)是語句開始符或過程開始符)“, ”error 0007: 應(yīng)是語句開始符“, ”error 0008: 過程體內(nèi)語句部分的后跟符不正確“, ”error 0009: 程序皆為丟了句號‘.’“, ”error 0010: 語句之間漏了‘。// 構(gòu)造函數(shù)// 析構(gòu)函數(shù)// 出錯處理,打印出錯// 詞法分析,讀取一// 漏掉空格,讀取一// 生成目標代碼,并送入目標// 測試當前單詞符號是否// 分程序分析處理過程// 登入名字表// 查找標示符在名字表中// 常量定義處理// 變量說明處理// 列出目標代碼清單// 語句部分處理// 表達式處理// 項處理// 因子處理// 條件處理// 數(shù)組說明處理// 對目標代碼的解釋// 通過靜態(tài)鏈求出數(shù)據(jù)區(qū)的 // 保存代碼}。執(zhí)行程序int base(int l,int b,int s[])。 dx,int lev)。void arraydeclaration(intamp。void factor(symset fsys,int tx,int lev)。void expression(symset fsys,int tx,int lev)。void listcode(int cx0)。tx,intamp。dx,int lev)。的位置void constdeclaration(intamp。dx,int lev)。void enter(obj0 k,int amp。程序區(qū)void test(symset s1,symset s2,int n)。個單詞void getch()。}void error(int n)。public:PL0(char* source,char*destination)。// 聲明開始、表達式開始和項開始符號集 Table table[txmax+1]。// 一些符號對應(yīng)的symbol類型表合 char mnemonic[8][6]。// 保留字表symbol wsym[norw+1]。// 詞法分析器中用于臨時存放正在分析的詞instruction code[cxmax+1]。// code line vector errorString。// code line string errStr[]。int cx。// character count int ll。// last identifier read int num。// last character read symbol sym。class PL0 {protected:bool listswitch,sourceEnd。}other。}inOther。obj0 kind。t big than amax }。t big than levmaxint a。// function code int l。// functions typedef set symset。// alfa類型用于標識符 typedef enum {CONSTANT,VARIABLE,PROCEDURE,ARRAY} obj0。// 行緩沖區(qū)長度typedef enum {NUL,IDENT,NUMBER,PLUS,MINUS,TIMES,SLASH,ODDSYM,EQL,NEQ,LSS,LEQ,GTR,GEQ,LPAREN,RPAREN,COMMA,SEMICOLON,PERIOD,BECOMES,BEGINSYM,ENDSYM,IFSYM,THENSYM,WHILESYM,WRITESYM,READSYM,DOSYM,CALLSYM,CONSTSYM,VARSYM,PROCSYM,ELSESYM,REPEATSYM,UNTILSYM} symbol。// maximum depth of block nesting 最大允許的塊嵌套層數(shù) const int cxmax = 200。// digits in numbers 數(shù)字的最大長度 const int amax = 2047。// length of identifier table 標示符表的長度(容量)const int al = 10。const int norw = 16。調(diào)用條件表達式處理過程生成相應(yīng)代碼把結(jié)果放在數(shù)據(jù)棧頂,再生成條件轉(zhuǎn)移指令,轉(zhuǎn)移位置為上面記錄的CX1。Repeat語句的處理:首先用CX1變量記下當前代碼段分配位置,作為循環(huán)的開始位置。then后的語句處理完后,如果遇到else,就調(diào)用語句處理過程處理else語句后面的語句或語句塊,這時當前代碼段分配指針的位置就應(yīng)該是上面的jpc指令的轉(zhuǎn)移位置。接下去記錄下代碼段分配位置(即下面生成的jpc指令的位置),然后生成 條件轉(zhuǎn)移jpc指令(遇0或遇假轉(zhuǎn)移),轉(zhuǎn)移地址未知暫時填0。如果是句號且分程序分析中未出錯,則是一個合法的PL/0程序,可以運行生成的代碼,否則就說明源PL/0程序是不合法的,輸出出錯提示即可。由PL/0的語法圖可知:一個完整的PL/0程序是由分程序和句號構(gòu)成的。這些過程在結(jié)構(gòu)上構(gòu)成一個嵌套的層次結(jié)構(gòu)。語法分析子程序分析:語法分析子程序采用了自頂向下的遞歸子程序法,語法分析同時也根據(jù)程序的語義生成相應(yīng)三元代碼,并提供了出錯處理的機制。如果識別出其它合法的符號(比如:賦值號、大于號、小于等于號等),則把SYM則成相應(yīng)的類型。查保留字表時使用了二分法查找以提高效率。詞法分析器的分析過程:調(diào)用GETSYM時,它通過GETCH過程從源程序中獲得一個字符。Getch過程通過反復(fù)調(diào)用Getch子過程從源程序過獲取字符,并把它們拼成單詞。在源程序沒有錯誤編譯通過的情況下,調(diào)用類PCODE解釋程序解釋執(zhí)行生成的類PCODE代碼。詞法分析和代碼生成作為獨立的子程序供語法分析程序調(diào)用。當源程序編譯正確時,PL/0編譯程序自動調(diào)用解釋執(zhí)行程序,對目標代碼進行解釋執(zhí)行,并按用戶程序的要求輸入數(shù)據(jù)和輸出運行結(jié)果。其編譯過程采用一趟掃描方式,以語法分析程序為核心,詞法分析和代碼生成程序都作為一個獨立的過程,當語法分析需要讀單詞時就調(diào)用詞法分析程序,而當語法分析正確需要生成相應(yīng)的目標代碼時,則調(diào)用代碼生成程序。PL/0的目標程序為假想棧式計算機的匯編語言,與具體計算機無關(guān)。}UNTIL 可根據(jù)自己具體情況從中選擇2個以上題目進行擴充。擴充var數(shù)組:VAR (:)〈下界〉和〈上界〉可用常量標識名。二、實驗內(nèi)容1)仔細閱讀PL/0編譯程序文本(編譯原理(第二版)張素琴 呂映芝 蔣維杜 戴桂蘭 主編清華大學(xué)出版社),并上機調(diào)試通過。通過本次課程設(shè)計掌握編譯程序調(diào)試技巧和設(shè)計編譯程序一般的原則,加深對詞法分析、語法分析、語義分析等編譯階段及實用編譯系統(tǒng)的認識。此外,對于文檔的編寫和美化自己也獲得了許多有用的經(jīng)驗。由于以前編寫代碼都是使用JAVA語言,所以C/C++很多內(nèi)容都忘記了,通過本次的實踐,自己又重新拾起了以前的知識。此外,對以前那些已掌握的知識有了溫習(xí)和動手鍛煉的機會。語法分析主要能根據(jù)遞歸向下的分析思想和C文法對詞法分析獲取的Token進行語法分析,能夠構(gòu)造出語法樹,能夠判別語法分析過程中是否出錯以及出錯位置和錯誤類型。通過這次的編譯原理課程的學(xué)習(xí)和實踐,自己獲益良多。由于在編寫代碼的過程中需要確定分析是否正確或選擇多個文法中的某一個文法進行分析,有時必須探測需要的或下一個Token的類型,在這種情況下需要求First集合,在推導(dǎo)中若存在empty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進行判斷,以確定程序的走向。首先自己對遞歸向下分析法進行了學(xué)習(xí),將書上的幾個遞歸向下分析的偽代碼看過之后,自己對遞歸向下的分析方法的原理有了初步的認識,大概知道了根據(jù)文法怎么分析,但是對于如何編寫代碼卻還在此處鍵入]是難以下手,于是就對照TINY語言的文法看了幾遍書后面的TINY語言的遞歸向下分析的語法分析程序,這樣就基本知道了C語言的語法分析程序怎么寫。再后來寫報告的時候,發(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進行查看比照。這只是詞法分析的原始代碼,在之后還進行了兩次徹底的改動。充分了解了詞法分析的任務(wù)之后,就開始理論知識的學(xué)習(xí)。自己著手寫詞法分析的時候還不清楚詞法分析的任務(wù)內(nèi)容,還不知道詞法分析的結(jié)果是什么,詞法分析出錯的情況和類型有哪些,也總是將詞法分析和語法分析混在一起,不明白哪些錯誤在詞法分析中報,哪些錯誤在語法分析中判斷,后來經(jīng)過查書、網(wǎng)上資料、請教同學(xué)等途徑逐步清晰了詞法分析的工作內(nèi)容是從源代碼文件中獲取出Token,供語法分析使用。完成基本功能224。理論知識的了解224。直接拷貝好歹也檢查一下錯誤對于編譯原理的這次課程設(shè)計,自己經(jīng)歷了從剛開始的不懂224。[在此處鍵入]測試優(yōu)化,輸入課件中的代碼,結(jié)果與課件一樣。39。 目標代碼模塊目標代碼生成把優(yōu)化后的中間代碼變換成目標代碼,此處的目標代碼為匯編代碼,采用單寄存器生成目標代碼 數(shù)據(jù)結(jié)構(gòu)[在此處鍵入]對于一個基本塊有如下流程圖W:操作符,B:第一操作數(shù),C:第二操作數(shù),R:寄存器網(wǎng)上找一段話抄上 [在此處鍵入]測試打開文件測試保存文件如果沒打開文件,直接敲代碼,點保存時會彈出另存為窗口[在此處鍵入]測試錯誤檢測,程序缺少main函數(shù)的類型,錯誤列表中顯示第一行函數(shù)缺少錯誤類型。public static string PrintErrorList()把所有發(fā)現(xiàn)的錯誤格式化后統(tǒng)一輸出。 數(shù)據(jù)結(jié)構(gòu)在此處鍵入] 四元式模塊四元式為中間代碼,編譯程序進行完語義分析后,先生成中間代碼作為過渡,此時中間代碼與目標代碼已經(jīng)比較相似 數(shù)據(jù)結(jié)構(gòu)[ 在此處鍵入]在語法分析
點擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1