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

正文內(nèi)容

pl0-編譯程序講解(編輯修改稿)

2024-08-31 22:41 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 變量說(shuō)明部分 語(yǔ)句 VAR 標(biāo)識(shí)符 ; 復(fù)合語(yǔ)句 A BEGIN 語(yǔ)句 END 讀語(yǔ)句 READ ( 標(biāo)識(shí)符 ) A 程序 為文法的 開(kāi)始符號(hào) ,以開(kāi) 始符號(hào)作為根結(jié) 點(diǎn)存在一棵倒掛 著的語(yǔ)法樹(shù)。 遞歸下降語(yǔ)法分析過(guò)程隱含著對(duì)對(duì)語(yǔ)法樹(shù)的前序遍歷 〈 表達(dá)式 〉 ∷= [+|]〈 項(xiàng) 〉 {( +|) 〈 項(xiàng) 〉 } int expression(bool* fsys, int* ptx, int lev) {if(sym==plus || sym==minus) {getsymdo。 termdo(nxtlev, ptx, lev)。 //處理項(xiàng) } else {termdo(nxtlev, ptx, lev)。 } // 處理項(xiàng) while (sym==plus || sym==minus) {getsymdo。 termdo(nxtlev, ptx, lev)。 // 處理項(xiàng) } return 0。 } 注意一致性:進(jìn)入每一語(yǔ)法單位處理程序之前,其第一個(gè)單詞已讀出,退出時(shí),應(yīng)讀出下一個(gè)語(yǔ)法單位的第一個(gè)單詞 〈 項(xiàng) 〉 ∷= 〈 因子 〉 {( *|/) 〈 因子 〉 } int term(bool* fsys, int* ptx, int lev) {factordo(nxtlev, ptx, lev)。 /* 處理因子 */ while(sym==times || sym==slash) {getsymdo。 factordo(nxtlev, ptx, lev)。 } return 0。 } 〈 因子 〉 ∷= 〈 標(biāo)識(shí)符 〉 |〈 無(wú)符號(hào)整數(shù) 〉 |‘( ’ 〈 表達(dá)式 〉 ‘) ’ int factor(bool* fsys, int* ptx, int lev) {if(sym == ident) /* 因子為常量或變量 */ getsymdo。 else {if(sym == number) getsymdo。 else if (sym == lparen) /* 因子為表達(dá)式 */ {getsymdo。 expressiondo(nxtlev, ptx, lev)。 if (sym == rparen) getsymdo。 else error(22)。 /* 缺少右括號(hào) */ } } return 0。 } PL/0語(yǔ)義分析的設(shè)計(jì)與實(shí)現(xiàn) ?說(shuō)明部分的分析 與處理 ?表格管理 ?過(guò)程體 (語(yǔ)句)的分析 與處理 說(shuō)明部分的分析 與處理 登錄符號(hào)表 ?對(duì)每個(gè)過(guò)程(含主程序) 說(shuō)明的對(duì)象 ( 變量 , 常量 和 過(guò)程 )造符號(hào)表 ?登錄 標(biāo)識(shí)符的 屬性 。 ?標(biāo)識(shí)符的屬性 :種類(lèi),所在 層次 ,值 和分配的 相對(duì)位置 。 ?登錄信息由 ENTER過(guò)程完成。 符號(hào)表結(jié)構(gòu) enum object {constant, variable, procedur}。 struct tablestruct { char name[al]。 enum object kind。 int val, level, adr, size。 } table[txmax]。 const a=35。//常量 無(wú) 層次 var a1,a2,a3。 Procedure P。 var b1,b2。 procedure P1。 var c。 …… procedure P2。 var d。 …… …… …… a a1 a2 a3 P b1 b2 co nsta nt VA RIAB LE VA RIAB LE VA RIAB LE PR OCED UR VA RIAB LE VA RIAB LE 35 0 0 0 0 1 1 3 4 5 1 3 4 5 P1 P2 d PR OCED UR PR OCED UR VA RIAB LE 1 1 2 k1 k 2 3 4 4 注意:在單趟編譯中,對(duì)于并列的函數(shù)(或分程序),其相應(yīng)的符號(hào)表不會(huì)同時(shí)存在。 過(guò)程 P2在code的 入口 (0) jmp 0 0 CX (1) jmp 0 0 (2) jmp 0 0 …… (k) jmp 0 0 名字 類(lèi) 值 層次 地址 大小 變量說(shuō)明部分 : :=var標(biāo)識(shí)符 {, 標(biāo)識(shí)符 }; if(sym==varsym)/* 收到變量聲明符號(hào),開(kāi)始處理變量聲明 */ {getsymdo。 do{vardeclarationdo(amp。tx, lev, amp。dx)。 while (sym == ma) {getsymdo。 vardeclarationdo(amp。tx, lev, amp。dx)。 } if (sym == semicolon) {getsymdo。} else error(5)。 }while (sym == ident)。 } 注意: amp。tx 變量說(shuō)明處理 int vardeclaration(int* ptx,int lev,int* pdx) {if (sym == ident) {enter(variable, ptx, lev, pdx)。//填寫(xiě)名字表 getsymdo。 } else {error(4)。} /* var后應(yīng)是標(biāo)識(shí) 符 */ return 0。 } 過(guò)程 ENTER的實(shí)現(xiàn) /* 在名字表中加入一項(xiàng) * * k: 名字種類(lèi) const,var or procedure * ptx: 名字表尾指針 * lev: 名字所在的層次 ,以后所有的 lev都是這樣 * pdx: 當(dāng)前應(yīng)分配變量的相對(duì)地址,分配后增加 1 */ void enter(enum object k, int* ptx,int lev, int* pdx) {(*ptx)++。 strcpy(table[(*ptx)].name, id)。 /* 全局變量 id中已存有當(dāng)前名字的名字 */ table[(*ptx)].kind = k。 switch (k) {case constant: /* 常量名字 */ if (num amax) {error(31)。 /* 數(shù)越界 */ num = 0。 } table[(*ptx)].val = num。 break。 case variable: /* 變量名字 */ table[(*ptx)].level = lev。 table[(*ptx)].adr = (*pdx)。 (*pdx)++。 break。 case procedur: /* 過(guò)程名字 */ table[(*ptx)].level = lev。 break。 } } 過(guò)程體的處理- 變量引用的處理 ?對(duì) 語(yǔ)句進(jìn)行 語(yǔ)法 分析 ?語(yǔ)義分析 當(dāng)遇到 標(biāo)識(shí)符的引用時(shí) 就調(diào)用 POSITION函數(shù) 查T(mén)ABLE表 ,看是否 有 過(guò) 正確定義 ,若已有,則從表中 取相應(yīng)的有關(guān) 信息 ,供代碼的生成使用。 若無(wú)定義則錯(cuò) 。 ?語(yǔ)義分析 TABLE表 若已 有 過(guò) 正確定義 ,檢查引用與說(shuō)明的屬性是否一致, 若不一致則錯(cuò) 。 ?當(dāng) 語(yǔ)法語(yǔ)義正確時(shí) ,就 生成 相應(yīng)語(yǔ)句功能的 目標(biāo)代碼 int position(cha
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1