下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、( 此文檔為 word 格式,下載后您可任意編輯修改!)編譯原理課程設(shè)計(jì)課程名稱(chēng)編譯原理學(xué)生學(xué)院計(jì)算機(jī)學(xué)院專(zhuān)業(yè)班級(jí)計(jì)算機(jī)科學(xué)與技術(shù)10( 8)學(xué)生姓名武小亮指導(dǎo)教師楊勁濤2012 年 1月 2日編譯原理課程設(shè)計(jì)報(bào)告一、設(shè)計(jì)要求:基本內(nèi)容 (成績(jī)范圍:“中”、“及格”或“不及格” )1( 1)擴(kuò)充賦值運(yùn)算:*= 和 =擴(kuò)充語(yǔ)句( Pascal 的 FOR 語(yǔ)句) : FOR < 變量 >:=<表達(dá)式 > TO < 表達(dá)式 > DO < 語(yǔ)句> FOR < 變量 >:=< 表達(dá)式 > DOWNTO < 表達(dá)式 >
2、DO < 語(yǔ)句 >其中,語(yǔ)句 的循環(huán)變量的步長(zhǎng)為2,語(yǔ)句 的循環(huán)變量的步長(zhǎng)為-2。( 3)增加運(yùn)算:+ 和 -。選做內(nèi)容 (成績(jī)?cè)u(píng)定范圍擴(kuò)大到: “優(yōu)”和“良”)( 1)增加類(lèi)型:字符類(lèi)型; 實(shí)數(shù)類(lèi)型。( 2)擴(kuò)充函數(shù):有返回值和返回語(yǔ)句;有參數(shù)函數(shù)。( 3)增加一維數(shù)組類(lèi)型(可增加指令) 。( 4)其他典型語(yǔ)言設(shè)施。二、課程設(shè)計(jì)中完成的內(nèi)容有:( 1)擴(kuò)充賦值運(yùn)算:*= 和 =(2)擴(kuò)充語(yǔ)句( Pascal的 FOR 語(yǔ)句) : FOR < 變量 >:=<表達(dá)式 > TO < 表達(dá)式 > DO < 語(yǔ)句> FOR < 變量 &
3、gt;:=< 表達(dá)式 > DOWNTO < 表達(dá)式 > DO < 語(yǔ)句 >其中,語(yǔ)句 的循環(huán)變量的步長(zhǎng)為2,語(yǔ)句 的循環(huán)變量的步長(zhǎng)為-2。( 3)增加運(yùn)算:+ 和 - 。三、實(shí)驗(yàn)環(huán)境與工具:(1)計(jì)算機(jī)及操作系統(tǒng):PC 機(jī), WindowsXP( 2)程序設(shè)計(jì)語(yǔ)言:VC+ 6.0( 3)教學(xué)型編譯程序:PL0四、設(shè)計(jì)方案:1、結(jié)構(gòu)說(shuō)明 :PL0 語(yǔ)言編譯過(guò)程采用一趟掃描方式 ,以語(yǔ)法分析程序?yàn)楹诵?,詞法分析程序和代碼生成程序都作為一個(gè)獨(dú)立的過(guò)程 ,當(dāng)語(yǔ)法分析需要讀單詞時(shí)就調(diào)用詞法分析程序 ,而當(dāng)語(yǔ)法分析正確需生成相應(yīng)的目標(biāo)代碼時(shí) ,則調(diào)用代碼生成程序 .此
4、外 ,用表格管理程序建立變量、常量和過(guò)程標(biāo)識(shí)符的說(shuō)明與引用之間的信息聯(lián)系.用出錯(cuò)處理程序?qū)υ~法和語(yǔ)法分析研究遇到的錯(cuò)誤給出在源程序中出錯(cuò)的位置和錯(cuò)誤性質(zhì) .當(dāng)源程序編譯正確時(shí),PL0 編譯程序自動(dòng)調(diào)用解釋執(zhí)行,并按用戶程序要求輸入數(shù)據(jù)和輸出運(yùn)行結(jié)果.2、流程圖:2編譯和解釋執(zhí)行的結(jié)構(gòu)圖PL0 編譯程序總體流程圖3、詞法分析詞法分析是編譯的第一個(gè)階段, 它的主要任務(wù)是從左向右逐個(gè)字符地對(duì)源程序進(jìn)行掃描,產(chǎn)生一個(gè)個(gè)單詞序列用于語(yǔ)法分析。 PL0 詞法分析程序 GETSYM的功能是為語(yǔ)法分析提供單詞用的,是語(yǔ)法分析的基礎(chǔ),把輸入的字符串形式的源程序分割成一個(gè)個(gè)單詞符號(hào)。經(jīng)過(guò)詞法分析程序分析出來(lái)的單詞
5、,對(duì)語(yǔ)言固有的單詞只給出類(lèi)別存放在全程變量 SYM中,而對(duì)用戶定義的單詞(標(biāo)識(shí)符或常數(shù))既給出類(lèi)別又給值,其類(lèi)別放在 SYM中,值放在全程變量 ID 或全程變量NUM中,全部單詞種類(lèi)由編譯程序定義的純量類(lèi)型 SYMBOL給出,稱(chēng)為語(yǔ)法詞匯表。詞法分析器的分析過(guò)程:調(diào)用 GETSYM時(shí),它通過(guò) GETCH過(guò)程從源程序中獲得一個(gè)字符。如果這個(gè)字符是字母,則繼續(xù)獲取字符或數(shù)字,最終可以拼成一個(gè)單詞,查保留字表,如果查到為保留字,則把SYM變量賦成相應(yīng)的保留字類(lèi)型值;如果沒(méi)有查到,則這個(gè)單詞應(yīng)是一個(gè)用戶自定義的標(biāo)識(shí)符(可能是變量名、常量名或是過(guò)程的名字) ,把 SYM置為 IDENT,把這個(gè)單詞存入I
6、D 變量。查保留字表時(shí)使用了二分法查找以提高效率。如果Getch 獲得的字符是數(shù)字,則繼續(xù)用Getch 獲取數(shù)字,并把它們拼成一個(gè)整數(shù)或?qū)崝?shù),然后把SYM 置為INTEGER,并把拼成的數(shù)值放入NUM變量。如果識(shí)別出其它合法的符號(hào)(比如:賦值號(hào)、大于號(hào)、小于等于號(hào)等) ,則把 SYM則成相應(yīng)的類(lèi)型。如果遇到不合法的字符,把 SYM置成 NUL。詞法分析程序 GETSYM將完成下列任務(wù):(1)濾空格(2)識(shí)別保留字(3)識(shí)別標(biāo)識(shí)符(4)拼數(shù)(5)拼復(fù)合詞(6)輸出源程序34、語(yǔ)法分析PL0 編譯程序的語(yǔ)法分析采用了自頂向下的遞歸的子程序法。 語(yǔ)法分析同時(shí)也根據(jù)程序的語(yǔ)義生成相應(yīng)三元代碼,并提供了
7、出錯(cuò)處理的機(jī)制。語(yǔ)法分析主要由分程序分析過(guò)程( BLOCK)、常量定義分析過(guò)程( ConstDeclaration )、變量定義分析過(guò)程( Vardeclaration )、語(yǔ)句分析過(guò)程( Statement )、表達(dá)式處理過(guò)程( Expression )、項(xiàng)處理過(guò)程( Term)、因子處理過(guò)程( Factor )和條件處理過(guò)程( Condition )構(gòu)成。這些過(guò)程在結(jié)構(gòu)上構(gòu)成一個(gè)嵌套的層次結(jié)構(gòu)。除此之外,還有出錯(cuò)報(bào)告過(guò)程( Error )、代碼生成過(guò)程( Gen)、測(cè)試單詞合法性及出錯(cuò)恢復(fù)過(guò)程( Test )、登錄名字表過(guò)程( Enter )、查詢(xún)名字表函數(shù)( Position )以及列出
8、類(lèi) PCODE代碼過(guò)程( Listcode )作過(guò)語(yǔ)法分析的輔助過(guò)程。由 PL0 的語(yǔ)法圖可知:一個(gè)完整的 PL0 程序是由分程序和句號(hào)構(gòu)成的。因此,本編譯程序在運(yùn)行的時(shí)候,通過(guò)主程序中調(diào)用分程序處理過(guò)程block 來(lái)分析分程序部分(分程序分析過(guò)程中還可能會(huì)遞歸調(diào)用 block 過(guò)程),然后,判斷最后讀入的符號(hào)是否為句號(hào)。如果是句號(hào)且分程序分析中未出錯(cuò),則是一個(gè)合法的 PL0 程序,可以運(yùn)行生成的代碼,否則就說(shuō)明源 PL0 程序是不合法的,輸出出錯(cuò)提示即可。45、語(yǔ)義分析PL0 的語(yǔ)義分析主要進(jìn)行以下檢查:(1) 是否存在標(biāo)識(shí)符先引用未聲明的情況;5(2) 是否存在己聲明的標(biāo)識(shí)符的錯(cuò)誤引用;(
9、3) 是否存在一般標(biāo)識(shí)符的多重聲明。6、語(yǔ)法錯(cuò)誤處理PL0 編譯程序?qū)φZ(yǔ)法錯(cuò)誤的處理采用兩種辦法:(1)對(duì)于一些易于校正的錯(cuò)誤,如丟了逗號(hào)、分號(hào)等,指出出錯(cuò)的位置,加以校正,繼續(xù)進(jìn)行分析。(2)對(duì)于難于校正的錯(cuò)誤,給出錯(cuò)誤的位置與性質(zhì),跳過(guò)后面一些單詞,直到下一個(gè)可以進(jìn)行正常語(yǔ)法分析的語(yǔ)法單位。7、解釋執(zhí)行這個(gè)過(guò)程模擬了一臺(tái)可以運(yùn)行類(lèi) PCODE指令的棧式計(jì)算機(jī)。解釋程序過(guò)程中的 base 函數(shù)的功能,就是用于沿著靜態(tài)鏈,向前查找相差指定層數(shù)的局部數(shù)據(jù)段基址。這在使用 sto 、lod 等訪問(wèn)局部變量的指令中會(huì)經(jīng)常用到。類(lèi) PCODE 代碼解釋執(zhí)行的部分通過(guò)循環(huán)和簡(jiǎn)單的 case 判斷不同的指
10、令,做出相應(yīng)的動(dòng)作。當(dāng)遇到主程序中的返回指令時(shí),指令指針會(huì)指到 0 位置,把這樣一個(gè)條件作為終至循環(huán)的條件,保證程序運(yùn)行可以正常的結(jié)束。生產(chǎn)目標(biāo)代碼后,程序調(diào)用Interpret程序解釋執(zhí)行,程序定義的一個(gè)數(shù)據(jù)區(qū) S,三個(gè)寄存器 T 棧頂寄存器, B 基址寄存器和 P 程序地址寄存器用于運(yùn)行程序。五、各功能模塊描述:過(guò)程或函數(shù)名簡(jiǎn)要功能說(shuō)明P10主程序error出錯(cuò)處理getsym詞法分析 , 讀取一個(gè)單詞Getch漏掉空格 , 讀取一個(gè)字符Gen生成目標(biāo)代碼 , 并送入目標(biāo)程序區(qū)Test測(cè)試當(dāng)前單詞符號(hào)是否合法Block分程序分析處理過(guò)程Enter登錄名字表Position查找標(biāo)識(shí)符在名字表
11、中的位置Constdeclaration常量定義處理Vardeclaration變量說(shuō)明處理Listcode列出目標(biāo)代碼清單6Statement語(yǔ)句部分處理Expression表達(dá)式處理Term項(xiàng)處理Factor因子處理Condition條件處理Interpret對(duì)目標(biāo)代碼的解釋執(zhí)行程序Base( 函數(shù) )通過(guò)靜態(tài)鏈求出數(shù)據(jù)區(qū)的基地址主要成分描述1、符號(hào)表struct ALFA NAME;OBJECTS KIND;union int VAL; *CONSTANT*struct int LEVEL,ADR,SIZE; vp; *VARIABLE,PROCEDUR:*; TABLETXMAX;所有
12、符號(hào)都放在全程量一維數(shù)組TABLE 表中。 TX 為索引表的指針,表中的每個(gè)元素為記錄型數(shù)據(jù)。LEV 給出層次, DX 給出每層局部量當(dāng)前已分配到的相對(duì)位置。且TABLE表的表頭索引TX 和層次單元LEV 都以 BLOCK 的參數(shù)形式出現(xiàn)。每個(gè)過(guò)程中的變量的相對(duì)初始位置在BLOCK 內(nèi)置初值DX : =3。結(jié)構(gòu)形式如下:NAMEKINDVALLEVELADRSIZE在編譯程序中符號(hào)表用來(lái)存放語(yǔ)言程序中出現(xiàn)的有關(guān)標(biāo)識(shí)符的屬性信息, 這些信息集中反映了標(biāo)識(shí)符的語(yǔ)義特征屬性. 符號(hào)表的主要功能如下:1、收集符號(hào)屬性2、上下文語(yǔ)義合法性檢查的依據(jù)3、作為目標(biāo)代碼生成階段地址分配的依據(jù).2、運(yùn)行時(shí)存儲(chǔ)組
13、織和管理由于編譯時(shí)目標(biāo)程序運(yùn)行的數(shù)據(jù)空間大小已經(jīng)規(guī)定,所以存儲(chǔ)組織屬于靜態(tài)存儲(chǔ)。源程序的標(biāo)識(shí)符存放在TABLE 表中,目標(biāo)代碼存放在CODE 中, S 是由解釋程序定義的一維整型數(shù)組,是程序運(yùn)行時(shí)的數(shù)據(jù)存儲(chǔ)空間。解釋程序還定義了4 個(gè)寄存器:1)P:程序地址寄存器:指向下一條要執(zhí)行的目標(biāo)程序的地址(相當(dāng)目標(biāo)程序CODE數(shù)組的下標(biāo))。2) I :指令寄存器:存放著當(dāng)前正在解釋的下一條目標(biāo)指令。3)T :棧頂寄存器:由于每個(gè)過(guò)程當(dāng)它被運(yùn)行時(shí),給它分配的數(shù)據(jù)空間(下邊稱(chēng)數(shù)據(jù)7段)包括靜態(tài)部分和動(dòng)態(tài)部分,對(duì)于動(dòng)態(tài)部分,要注意的是,棧頂寄存器指出了當(dāng)前棧中最新分配的單元。4)B:基址寄存器: 指向每個(gè)過(guò)
14、程被調(diào)用時(shí), 在數(shù)據(jù)區(qū) S 中給它分配的數(shù)據(jù)段的起始地址,也稱(chēng)基地址。3、語(yǔ)法分析方法自頂向下的語(yǔ)法分析 :<程序 ><分程序>.<變量說(shuō)明部分 ><語(yǔ)句 >VAR <標(biāo)識(shí)符 >; < 復(fù)合語(yǔ)句 >ABEGIN <語(yǔ)句 > END<讀語(yǔ)句 >READ(<標(biāo)識(shí)符>)A4、中間代碼表示PL0 編譯程序所產(chǎn)生的目標(biāo)代碼是一個(gè)假想棧式計(jì)算機(jī)的匯編語(yǔ)言,可稱(chēng)為類(lèi)PCODE指令代碼,它不依賴(lài)任何實(shí)際計(jì)算機(jī),中間代碼生成是由過(guò)程GEN 完成, GEN 有 3 個(gè)參數(shù),分別代表目標(biāo)代碼的功能碼,層差和位
15、移量其指令集極為簡(jiǎn)單,指令格式也很單純,其格式如下:FLA例如: gen(opr,0,16); gen(sto,lev-level,adr)lev:當(dāng)前處理的過(guò)程層次level:被引用變量或過(guò)程所在層次CX :為目標(biāo)代碼code 數(shù)組的下標(biāo)指針其中F 為功能號(hào); L 為層次差,也就是變量或過(guò)程被引用的分程序與說(shuō)明該變量的過(guò)程之間的層次差; A 的含義對(duì)不同指令有所區(qū)別,對(duì)存取指令表示位移,而對(duì)其它指令則分別有不同含義,解析說(shuō)明如下: LIT :將常量取到棧頂。L 為常數(shù)類(lèi)型;A 為常數(shù)值。 LOD :將變量放到棧頂。A 為變量在說(shuō)明層中的相對(duì)位置,L 為調(diào)用說(shuō)明層的差值。 STO :將棧頂?shù)膬?nèi)
16、容送入某變量單元中。A、 L 含義如上。 CAL :過(guò)程調(diào)用指令。A 為被調(diào)用過(guò)程的目標(biāo)程序入口地址,L 為層差。 INT :為被調(diào)用過(guò)程在運(yùn)行棧中開(kāi)辟數(shù)據(jù)區(qū),A 為開(kāi)辟的單元數(shù)。8 JMP :無(wú)條件跳轉(zhuǎn)指令,A 為轉(zhuǎn)向地址。 JPC :條件跳轉(zhuǎn)指令,當(dāng)棧頂?shù)闹禐榧贂r(shí),轉(zhuǎn)向A ,否則順序執(zhí)行。 OPR : opr 的 L 域?yàn)?0, A 域的內(nèi)容決定操作含義,具體說(shuō)明如下:A=0 過(guò)程調(diào)用結(jié)束后返回調(diào)用點(diǎn),并釋放被調(diào)用過(guò)程在運(yùn)行棧的數(shù)據(jù)空間。 A=1 棧頂值取反,結(jié)果在棧頂。A=2 次棧頂與棧頂相加,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。 A=3 次棧頂減去棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。 A=4 次棧頂
17、乘以棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。 A=5 次棧頂除以棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。A=6 對(duì)棧頂值做奇偶判斷,奇數(shù)為真,偶數(shù)為假,結(jié)果放棧頂。 A=8 次棧頂與棧頂是否相等,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。 A=9 次棧頂與棧頂是否不等,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。 A=10 次棧頂是否小于棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。 A=11 次棧頂是否大于等于棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。A=12 次棧頂是否大于棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。A=13 次棧頂是否小于等于棧頂,退兩個(gè)棧元素,結(jié)果值進(jìn)棧。A= 14棧頂值輸出到屏幕。A=15屏幕輸出換行。A=16從命令行讀入一個(gè)輸入到棧頂。A 為其他值均
18、為非法指令。六、設(shè)計(jì)實(shí)現(xiàn):(1)增加賦值運(yùn)算符 *= 和 =以及 +,-(a)首先給這四個(gè)運(yùn)算符命名, 分別命為 timeseql,slasheql ,和 pps,mms以便讀單詞時(shí)填寫(xiě)符號(hào)表。分析 *= 、 =、+、- ,當(dāng)遇到 +時(shí),根據(jù) TABLE表中的 C 地址把 C 的值放在棧頂,再把棧頂元素和次棧頂元素相加,然后保存 C 的值。 - 的原理與 +相同。( b)在 PL0 程序中的修改如下:詞法分析GetSym 中添加, 語(yǔ)句分析STATEMENT中添加, expression將執(zhí)行一系列指令,但最終結(jié)果將會(huì)保存在棧頂,執(zhí)行sto 命令完成賦值 *1). 詞法分析中修改else 下面
19、部分為較書(shū)本的版本增加的功能if(ch='+') 讀到 +號(hào),判斷是否是 +getchdo;if(ch='+')sym=pps; +getchdo;else9sym=plus;單個(gè) +elseif(ch='-')讀到 -號(hào),判斷是否是 -getchdo;if(ch='-')sym=mms; -getchdo;elsesym=minus;單獨(dú) -elseif(ch='*')讀到 * 號(hào),判斷是否是 *=getchdo;if(ch='=')sym=timeseql; *=getchdo;elsesym=
20、times; 單獨(dú) *elseif(ch='')讀到號(hào),判斷是否是 =getchdo;if(ch='=')10sym=slasheql; =getchdo;elsesym=slash; 單獨(dú)2) 語(yǔ)句分析STATEMENT中添加else if(sym=slasheql)檢測(cè)到符號(hào)i=position(id,*ptx);把類(lèi) x*=3 的 x的地址取出來(lái)gendo(lod,lev-tablei.level,tablei.adr);* 找到變量地址并將其值入棧 *getsymdo;if(sym=semicolon)getsymdo;memcpy(nxtlev,fsy
21、s,sizeof(bool)* symnum);expressiondo(nxtlev,ptx,lev);gendo(opr,0,5);if(i!=0)gendo(sto,lev-tablei.level,tablei.adr);else if(sym=pps)檢測(cè)到后置 +符號(hào)gendo(lit,0,1);gendo(lod,lev-tablei.level,tablei.adr);* 找到變量地址并將其值入棧 *gendo(opr,0,2);執(zhí)行加操作,if(i!=0)gendo(sto,lev-tablei.level,tablei.adr);getsymdo;11else if(sym
22、=mms)檢測(cè)到后置 -符號(hào)gendo(lod,lev-tablei.level,tablei.adr);* 找到變量地址并將其值入棧 *gendo(lit,0,1);gendo(opr,0,3);執(zhí)行減操作,if(i!=0)gendo(sto,lev-tablei.level,tablei.adr);getsymdo;elseerror(13);if(i!=0)gendo(sto,lev-tablei.level,tablei.adr);( 2)擴(kuò)充語(yǔ)句( Pascal的 FOR 語(yǔ)句) : FOR <變量 >:=<表達(dá)式 > TO < 表達(dá)式 > DO
23、<語(yǔ)句> FOR < 變量 >:=< 表達(dá)式 > DOWNTO < 表達(dá)式 > DO < 語(yǔ)句 >(a)增加保留字 FOR、TO、DOWNTO、DO到相應(yīng)的位置,用于詞法分析的識(shí)別(b) 其跳轉(zhuǎn)圖為12)在 statement 中添加,類(lèi)似 else 的方式,主要是處理好如何出入棧的問(wèn)題,代碼中有詳細(xì)的注釋。elseif(sym=forsym)準(zhǔn)備按照f(shuō)or 語(yǔ)句處理getsymdo;if(sym=ident)i=position(id,*ptx);if(i=0) error(11);elseif(tablei.kind!=varia
24、ble)賦值語(yǔ)句中,賦值號(hào)左部標(biāo)識(shí)符屬性應(yīng)是變量error(12);i=0;elsegetsymdo;if(sym!=becomes)error(13);賦值語(yǔ)句左部標(biāo)識(shí)符后應(yīng)是賦值號(hào):=else getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlevtosym=true;后跟符 to 和 downtonxtlevdowntosym=true;expressiondo(nxtlev,ptx,lev);處理賦值語(yǔ)句右部的表達(dá)式E1gendo(sto,lev-tablei.level,tablei.adr);保存初值switch(sym)13
25、case tosym:步長(zhǎng)為的向上增加getsymdo;cx1=cx;保存循環(huán)開(kāi)始點(diǎn)將循環(huán)判斷變量取出放到棧頂gendo(lod,lev-tablei.level,tablei.adr);memcpy(nxtlev,fsys,sizeof(bool)*symnum);處理表達(dá)式E2nxtlevdosym=true;后跟符 doexpressiondo(nxtlev,ptx,lev);*判斷循環(huán)變量條件,比如for i:=E1 to E2 do S 中,判斷 i 是否小于E2 ,如小于等于,繼續(xù)循環(huán),大于的話,跳出循環(huán)*gendo(opr,0,13);生成比較指令,i 是否小于等于E2 的值cx
26、2=cx;保存循環(huán)結(jié)束點(diǎn)生成條件跳轉(zhuǎn)指令, 跳出循環(huán),跳出的地址未知gendo(jpc,0,0);if(sym=dosym)處理循環(huán)體Sgetsymdo;statement(fsys,ptx,lev);循環(huán)體處理增加循環(huán)變量步長(zhǎng)為將循環(huán)變量取出放在棧頂gendo(lod,lev-tablei.level,tablei.adr);gendo(lit,0,2);將步長(zhǎng)取到棧頂gendo(opr,0,2);循環(huán)變量加步長(zhǎng)將棧頂?shù)闹荡嫒胙h(huán)變量14gendo(sto,lev-tablei.level,tablei.adr);gendo(jmp,0,cx1);無(wú)條件跳轉(zhuǎn)到循環(huán)開(kāi)始點(diǎn)* 回填循環(huán)結(jié)束點(diǎn)的地
27、址, cx 為 else后語(yǔ)句執(zhí)行完的位置,它正是前面未定的跳轉(zhuǎn)地址*codecx2.a=cx;elseerror(29);for語(yǔ)句中少了dobreak;casedowntosym:步長(zhǎng)為的向下減少getsymdo;cx1=cx;保存循環(huán)開(kāi)始點(diǎn)將循環(huán)判斷變量取出放到棧頂gendo(lod,lev-tablei.level,tablei.adr);memcpy(nxtlev,fsys,sizeof(bool)*symnum);處理表達(dá)式E2nxtlevdosym=true;后跟符 doexpressiondo(nxtlev,ptx,lev);*判斷循環(huán)變量條件,比如 for i:=E1 downto E2 do S 中,判斷 i 是否大于等于E2 ,如大于等于,繼續(xù)循環(huán),小于的話,跳出循環(huán)*gendo(opr,0,11);生成比較指令,i 是否大于等于E2 的值cx2=cx;保存循環(huán)結(jié)束點(diǎn)生成條件跳轉(zhuǎn)指令, 跳出循環(huán),跳出的地址未知gendo(jpc,0,0);i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年民生銀行蘭州分行社會(huì)招聘?jìng)淇碱}庫(kù)含答案詳解
- 2025年防城港市生態(tài)環(huán)境局招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 2025年能源產(chǎn)業(yè)十年分析:風(fēng)能利用與能源存儲(chǔ)報(bào)告
- 2025年陶瓷釉料五年藝術(shù)裝飾專(zhuān)利分析報(bào)告
- 成都農(nóng)商銀行關(guān)于2025年產(chǎn)業(yè)金融崗社會(huì)招聘的備考題庫(kù)及答案詳解參考
- 2026四川廣元市昭化區(qū)元壩鎮(zhèn)人民政府招聘城鎮(zhèn)公益性崗位人員23人模擬筆試試題及答案解析
- 2025年北京協(xié)和醫(yī)院心內(nèi)科合同制科研助理招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 2025鞍山臺(tái)安縣教育系統(tǒng)面向師范類(lèi)院校應(yīng)屆畢業(yè)生校園招聘13人筆試重點(diǎn)題庫(kù)及答案解析
- 2025山東勞動(dòng)職業(yè)技術(shù)學(xué)院招聘8人筆試重點(diǎn)試題及答案解析
- 2025年光澤縣縣屬?lài)?guó)有企業(yè)專(zhuān)崗招聘退役軍人2人考試核心試題及答案解析
- 100以?xún)?nèi)乘法除法口算題目匯編1000道可打印
- 拉力賽比賽流程
- 光纜海底故障診斷-深度研究
- (正式版)JBT 9229-2024 剪叉式升降工作平臺(tái)
- 降低臥床患者便秘品管圈課件
- 工程測(cè)量水準(zhǔn)儀課件
- 《楓丹白露宮苑景觀分析》課件
- 中國(guó)石油大學(xué)(華東)自動(dòng)控制課程設(shè)計(jì) 雙容水箱系統(tǒng)的建模、仿真于控制-2
- 潘謝礦區(qū)西淝河、泥河、濟(jì)河、港河水體下安全開(kāi)采可行性論證報(bào)告
- 創(chuàng)業(yè)人生(上海大學(xué))【超星爾雅學(xué)習(xí)通】章節(jié)答案
- GB/T 4957-2003非磁性基體金屬上非導(dǎo)電覆蓋層覆蓋層厚度測(cè)量渦流法
評(píng)論
0/150
提交評(píng)論