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

正文內(nèi)容

編譯原理課程設(shè)計-- pl0語言的擴(kuò)充-文庫吧

2025-05-15 12:16 本頁面


【正文】 base(函數(shù) ) 通過 靜態(tài)鏈求出數(shù)據(jù)區(qū)的基地址 表 41 PL/0 編譯程序的過程或函數(shù)的功能表 3. PL/0編譯程序的總體流程圖 PL/0 源程序 詞法分析程序 語法語義分析程序 代碼生成 目標(biāo)代碼 表格管理程序 出錯管理程序 圖 41 PL/0 編譯程序的結(jié)構(gòu)圖 2 啟 動置 初 值調(diào) 用 G E T S Y M 取 單 詞調(diào) 用 B L O C K 過 程當(dāng) 前 單 詞是 否 為 源 程 序 結(jié) 束 符39。 . 39。 ?出 錯源 程 序 中是 否 有 錯 誤 ?調(diào) 用 解 釋 過 程 I N T E R P R E T解 釋 執(zhí) 行 目 標(biāo) 程 序打 印 錯 誤結(jié) 束NYYN 圖 42 PL/0 編譯程序的總體流程圖 4. PL/0編譯程序的 中間代碼 對 PL/0 編譯程序的目標(biāo)代碼的指令格式描述如下: f l a 其中 f 代表功能碼, l 表示層次差, a 的含意對不同的指令有所區(qū)別,見下面對每條指令的解釋說明: Lit 0 a 將常數(shù)值取到棧 頂, a 為常數(shù)值 lod l a 將變量值取到棧頂, a 為偏移量, l為層差 sto l a 將棧頂內(nèi)容送入某變量單元中, a 為偏移量, l為層差 cal l a 調(diào)用過程, a 為過程地址, l為層差 int 0 a 在運行棧中為被調(diào)用的過程開辟 a 個單元的數(shù)據(jù)區(qū) jmp 0 a 無條件跳轉(zhuǎn)至 a 地址 jpc 0 a 條件跳轉(zhuǎn),當(dāng)棧頂布爾值非真則跳轉(zhuǎn)至 a 地址,否則順序執(zhí)行 opr 0 0 過程調(diào)用結(jié)束后 ,返回調(diào)用點并退棧 opr 0 1 棧頂元素取反 opr 0 2 次棧頂與棧頂相加,退兩個棧元素,結(jié)果值進(jìn) 棧 opr 0 3 次棧頂減去棧頂,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 4 次棧頂乘以棧頂,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 5 次棧頂除以棧頂,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 6 棧頂元素的奇偶判斷,結(jié)果值在棧頂 opr 0 7 opr 0 8 次棧頂與棧頂是否相等,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 9 次棧頂與棧頂是否不等,退兩個棧元素,結(jié)果值進(jìn)棧 3 opr 0 10 次棧頂是否小于棧頂,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 11 次棧頂是否大于等于棧頂,退兩個棧元素, 結(jié)果值進(jìn)棧 opr 0 12 次棧頂是否大于棧頂,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 13 次棧頂是否小于等于棧頂,退兩個棧元素,結(jié)果值進(jìn)棧 opr 0 14 棧頂值輸出至屏幕 opr 0 15 屏幕輸出換行 opr 0 16 從命令行讀入一個輸入置于棧頂 表 42 PL/0 編譯程序的 目標(biāo)指令 5. PL\0的編譯程序的過程和函數(shù)的功能 Pl0:主程序 Error:出錯處理,打印出錯位置和錯誤編碼 Getsym:詞法分析,讀取一個單詞 Getch:漏掉空格,讀取一個字符 Gen:生成目標(biāo)代碼, 并送入目標(biāo)程序區(qū) Test:測試當(dāng)前單詞符號是否合法 Block:分程序分析處理過程 Enter:登陸名字表 Position:查找標(biāo)識符在名字表中的位置 Constdeclaration:常量定義處理 Vardeclaration:變量說明處理 Listcode:列出目標(biāo)代碼清單 Statement:語句部分處理 Expression:表達(dá)式處理 Term:項處理 Factor:因子處理 Condition:條件處理 Interpret:對目標(biāo)代碼的解釋執(zhí)行程序 Base:通過靜態(tài)鏈求出數(shù)據(jù)區(qū)的基地址 五. 課程設(shè)計的設(shè)計與步驟 本次課程設(shè)計 是在實驗的基礎(chǔ)上,在實驗中,已經(jīng)實現(xiàn) 對 PL/0 作以下修改擴(kuò)充: ( 1)增加單詞:保留字 ELSE, FOR, STEP, UNTIL, RETURN 運算符 +=, =, ++, ,∧,∨,┓ ( 2)修改單詞:不等號 改為 ( 3)增加條件語句的 ELSE 子句 在課程設(shè)計中 ,因為關(guān)鍵字增加到了 18 個,所以令 define norw 18。 SYMBOL 擴(kuò)展為 48個值 。 在 中做了如下更改 , 具體如下(粗體部分為 課程設(shè)計 更改部分): enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, ma, semicolon,period, bees, 4 beginsym, endsym, ifsym, thensym, whilesym, writesym, readsym, dosym, callsym, constsym, varsym, procsym, elsesym, forsym, stepsym, untilsym, returnsym, plusbees, dplus, minusbees, dminus, and, or, not,lepa,ripa, slashbees,timesbees, }。 define symnum 48 符號和關(guān)鍵字?jǐn)U展(粗體部分為課程設(shè)計更改部分) : ssym[39。+39。]=plus。 ssym[39。39。]=minus。 ssym[39。*39。]=times。 ssym[39。/39。]=slash。 ssym[39。(39。]=lparen。 ssym[39。)39。]=rparen。 ssym[39。=39。]=eql。 ssym[39。,39。]=ma。 ssym[39。.39。]=period。 //ssym[39。39。]=neq。 去掉 ,改為 ssym[39。39。]=semicolon。 ssym[39。!39。]=not。 //非 ssym[39。[39。]=lepa。//一維數(shù)組的左括號 [ ssym[39。]39。]=ripa。//一維數(shù)組的右括號 ] /*設(shè)置保留字名字 ,按照字母順序 ,便于折半查找 */ strcpy(amp。(word[0][0]),begin)。 strcpy(amp。(word[1][0]),call)。 strcpy(amp。(word[2][0]),const)。 strcpy(amp。(word[3][0]),do)。 strcpy(amp。(word[4][0]),else)。 strcpy(amp。(word[5][0]),end)。 strcpy(amp。(word[6][0]),for)。 strcpy(amp。(word[7][0]),if)。 strcpy(amp。(word[8][0]),odd)。 strcpy(amp。(word[9][0]),procedure)。 strcpy(amp。(word[10][0]),read)。 strcpy(amp。(word[11][0]),return)。 strcpy(amp。(word[12][0]),step)。 strcpy(amp。(word[13][0]),then)。 strcpy(amp。(word[14][0]),until)。 strcpy(amp。(word[15][0]),var)。 strcpy(amp。(word[16][0]),while)。 strcpy(amp。(word[17][0]),write)。 /*設(shè)置保留字符號 */ wsym[0]=beginsym。 5 wsym[1]=callsym。 wsym[2]=constsym。 wsym[3]=dosym。 wsym[4]=elsesym。 wsym[5]=endsym。 wsym[6]=forsym。 wsym[7]=ifsym。 wsym[8]=oddsym。 wsym[9]=procsym。 wsym[10]=readsym。 wsym[11]=returnsym。 wsym[12]=stepsym。 wsym[13]=thensym。 wsym[14]=untilsym。 wsym[15]=varsym。 wsym[16]=whilesym。 wsym[17]=writesym。 設(shè)置指令名稱 (粗體部分為課程設(shè)計更改部分): strcpy(amp。(mnemonic[lit][0]),lit)。 strcpy(amp。(mnemonic[opr][0]),opr)。 strcpy(amp。(mnemonic[lod][0]),lod)。 strcpy(amp。(mnemonic[sto][0]),sto)。 strcpy(amp。(mnemonic[cal][0]),cal)。 strcpy(amp。(mnemonic[inte][0]),int)。 strcpy(amp。(mnemonic[jmp][0]),jmp)。 strcpy(amp。(mnemonic[jpc][0]),jpc)。 strcpy(amp。(mnemonic[gar][0]),gar)。 strcpy(amp。(mnemonic[sar][0]),sar)。 strcpy(amp。(mnemonic[shd][0]),shd)。 strcpy(amp。(mnemonic[del][0]),del)。 strcpy(amp。(mnemonic[jud][0]),jud)。 strcpy(amp。(mnemonic[tra][0]),tra)。 1.?dāng)U充賦值運算: += = *= /= ++ 和 6 1) 在 symbol增加字符: Plusbees: += Minusbees: = Slashbees: *= Timesbees: /= 2) 對取字符 getsym()函數(shù)進(jìn)行擴(kuò)充, 具體如下(粗體部分為更改部分): int getsym() { ...//此處省略部分未修改過的代碼 else
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1