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

正文內(nèi)容

pl0源代碼(c語(yǔ)言版)(編輯修改稿)

2025-09-01 00:50 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ))) { getsymdo。 } } return 0。}/* *編譯程序主體 * *lev:當(dāng)前分程序所在層 *tx:名字表當(dāng)前尾指針 *fsys:當(dāng)前模塊后跟符號(hào)集合 */int block(int lev,int tx,bool* fsys){ int i。 int dx。 /*名字分配到的相對(duì)地址*/ int tx0。 /*保留初始tx*/ int cx0。 /*保留初始cx*/ bool nxtlev[symnum]。 /*在下級(jí)函數(shù)的參數(shù)中,符號(hào)集合均為值參,但由于使用數(shù)組 實(shí)現(xiàn),傳遞進(jìn)來的是指針,為防止下級(jí)函數(shù)改變上級(jí)函數(shù)的 集合,開辟新的空間傳遞給下級(jí)函數(shù)*/ dx=3。 tx0=tx。 /*記錄本層名字的初始位置*/ table[tx].adr=cx。 gendo(jmp,0,0)。 if(lev levmax) { error(32)。 } do{ if(sym==constsym) /*收到常量聲明符號(hào),開始處理常量聲明*/ { getsymdo。 do{ constdeclarationdo(amp。tx,lev,amp。dx)。 /*dx的值會(huì)被constdeclaration改變,使用 指針*/ while(sym==ma) { getsymdo。 constdeclarationdo(amp。tx,lev,amp。dx)。 } if(sym==semicolon) { getsymdo。 } else { error(5)。 /*漏掉了逗號(hào)或者分號(hào)*/ } }while(sym==ident)。 } if(sym==varsym)/*收到變量聲名符號(hào),開始處理變量聲名*/ { 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)。 } while(sym==procsym)/*收到過程聲名符號(hào),開始處理過程聲名*/ { getsymdo。 if(sym==ident) { enter(procedur,amp。tx,lev,amp。dx)。/*記錄過程名字*/ getsymdo。 } else { error(4)。/*procedure后應(yīng)為標(biāo)識(shí)符*/ } if(sym==semicolon) { getsymdo。 } else { error(5)。/*漏掉了分號(hào)*/ } memcpy(nxtlev,fsys,sizeof(bool)*symnum)。 nxtlev[semicolon]=true。 if(1==block(lev+1,tx,nxtlev)) { return 1。/*遞歸調(diào)用*/ } if(sym==semicolon) { getsymdo。 memcpy(nxtlev,statbegsys,sizeof(bool)*symnum)。 nxtlev[ident]=true。 nxtlev[procsym]=true。 testdo(nxtlev,fsys,6)。 } else { error(5)。 /*漏掉了分號(hào)*/ } } memcpy(nxtlev,statbegsys,sizeof(bool)*symnum)。 nxtlev[ident]=true。 nxtlev[period]=true。 testdo(nxtlev,declbegsys,7)。 }while(inset(sym,declbegsys))。 /*直到?jīng)]有聲明符號(hào)*/ code[table[tx0].adr].a=cx。 /*開始生成當(dāng)前過程代碼*/ table[tx0].adr=cx。 /*當(dāng)前過程代碼地址*/ table[tx0].size=dx。 /*聲明部分中每增加一條聲明都會(huì)給dx增加1,聲明部分已經(jīng)結(jié)束,dx就是當(dāng)前過程數(shù)據(jù)的size*/ cx0=cx。 gendo(inte,0,dx)。 /*生成分配內(nèi)存代碼*/ if(tableswitch) /*輸出名字表*/ { printf(TABLE:\n)。 if(tx0+1tx) { printf(NULL\n)。 } for(i=tx0+1。i=tx。i++) { switch(table[i].kind) { case constant: printf(%d const %s,i,table[i].name)。 printf(val=%d\n,table[i].val)。 fprintf(fas,%d const %s,i,table[i].name)。 fprintf(fas,val=%d\n,table[i].val)。 break。 case variable: printf(%d var%s,i,table[i].name)。 printf(lev=%d addr=%d\n,table[i].level,table[i].adr)。 fprintf(fas,%d var %s,i,table[i].name)。 fprintf(fas,lev=%d addr=%d\n,table[i].level,table[i].adr)。 break。 case procedur: printf(%d proc%s,i,table[i].name)。 printf(lev=%d addr=%d size=%d\n,table[i].level,table[i].adr,table[i].size)。 fprintf(fas,%d proc%s,i,table[i].name)。 fprintf(fas,lev=%d adr=%d size=%d \n,table[i].level,table[i].adr,table[i].size)。 break。 } } printf(\n)。 } /*語(yǔ)句后跟符號(hào)為分號(hào)或end*/ memcpy(nxtlev,fsys,sizeof(bool)*symnum)。/*每個(gè)后跟符號(hào)集和都包含上層后跟符號(hào)集和,以便補(bǔ)救*/ nxtlev[semicolon]=true。 nxtlev[endsym]=true。 statementdo(nxtlev,amp。tx,lev)。 gendo(opr,0,0)。 /*每個(gè)過程出口都要使用的釋放數(shù)據(jù)段命令*/ memset(nxtlev,0,sizeof(bool)*symnum)。 /*分程序沒有補(bǔ)救集合*/ test(fsys,nxtlev,8)。 /*檢測(cè)后跟符號(hào)正確性*/ listcode(cx0)。 /*輸出代碼*/ return 0。}/**在名字表中加入一項(xiàng)**k:名字種類const,var or procedure*ptx:名字表尾指針的指針,為了可以改變名字表尾指針的數(shù)值*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 (numamax) { error(31)。 num=0。 } table[(*ptx)].val=num。 break。 case variable: /*變量名字*/ table[(*ptx)].level=lev。 table[(*ptx)].adr=(*pdx)。 (*pdx)++。 break。 /*過程名字*/ case procedur: table[(*ptx)].level=lev。 break。 }}/* *查找名字的位置 *找到則返回在名字表中的位置,否則返回0 * *idt: 要查找的名字 *tx::當(dāng)前名字表尾指針 */int position(char * idt,int tx){ int i。 strcpy(table[0].name,idt)。 i=tx。 while(strcmp(table[i].name,idt)!=0) { i。 } return i。}/* *常量聲明處理 */int constdeclaration(int * ptx,int lev,int * pdx){ if(sym==ident) { getsymdo。 if(sym==eql ||sym==bees) { if(sym==bees) { error(1)。 /*把=寫出成了:=*/ } getsymdo。 if(sym==number) { enter(constant,ptx,lev,pdx)。 getsymdo。 } else { error(2)。 /*常量說明=后應(yīng)是數(shù)字*/ } } else { error(3)。
點(diǎn)擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1