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

正文內(nèi)容

編譯原理課程設(shè)計教案-閱讀頁

2024-11-10 21:50本頁面
  

【正文】 int lev)。 tx,intamp。void interpret()?;刂穠oid SaveCode()。endif : include “”// 錯誤字符串?dāng)?shù)組string PL0::errStr[]={“,”error 0001: 常數(shù)說明中“=”寫成“:=”“, ”error 0002: 常數(shù)說明中的“=”后應(yīng)為數(shù)字“, ”error 0003: 常數(shù)說明中的標(biāo)識符后應(yīng)是“=”“, ”error 0004: const,var,procedure后應(yīng)為標(biāo)識符“, ”error 0005: 漏掉了‘,’或‘?!? ”error 0011: 標(biāo)識符沒說明“, ”error 0012: 賦值語句中,賦值號左部標(biāo)識符屬性應(yīng)是變量“, ”error 0013: 賦值語句左部標(biāo)識符應(yīng)是賦值號:=“, ”error 0014: call后應(yīng)為標(biāo)識符“, ”error 0015: call后標(biāo)識符屬性應(yīng)為過程“, ”error 0016: 條件語句中丟了then“, ”error 0017: 丟了end或。// PL0構(gòu)造函數(shù)PL0::PL0(char* source,char*destination){ listswitch=true,sourceEnd=false。// 初始化存儲保留字strcpy(word[2],”call“)。strcpy(word[4],”do“)。strcpy(word[6],”end“)。strcpy(word[8],”odd“)。strcpy(word[10],”read“)。strcpy(word[12],”then“)。strcpy(word[14],”var“)。strcpy(word[16],”write“)。wsym[2]= CALLSYM。wsym[4]= DOSYM。wsym[6]= ENDSYM。wsym[8]= ODDSYM。wsym[10]= READSYM。wsym[12]= THENSYM。wsym[14]= VARSYM。wsym[16]= WRITESYM。memset(ssym,0,100*sizeof(symbol))。memset(line,0,sizeof(line))。+39。類型表ssym[39。]= MINUS。*39。ssym[39。]= SLASH。(39。ssym[39。]= RPAREN。=39。ssym[39。]= COMMA。.39。// 初始化保留字表中每一個保// 初始化一些符號對應(yīng)的symbolssym[39。]= NEQ。39。ssym[39。]= SEMICOLON。// 初始化類PCODE指令助記符表strcpy(mnemonic[OPR],” opr “)。strcpy(mnemonic[STO],” sto “)。strcpy(mnemonic[INT],” int “)。strcpy(mnemonic[JPC],” jpc “)。// 初始化聲明開始符號集合 (BEGINSYM),(CALLSYM),(IFSYM),(WHILESYM)。// 初始化項開始符號集合err= 0。// 行緩沖區(qū)指針cx= 0。// 行緩沖區(qū)長度ch= 39。// last character read}kk= al。// code line =fopen(source,”r“)。// 出錯處理,打印出錯位置和出錯代碼 void PL0::error(int n){ char s[10]。(s+errStr[n])。//error count }//error end // 詞法分析,讀取一個單詞void PL0::getsym(){ if(sourceEnd)return。while(ch ==39。||ch==9)getch()。memset(a,0,al+1)。k= k+1。if(sourceEnd)return。if(k = kk)kk = k。 39。}while(kk k)。i= 1。// 判斷是否是關(guān)鍵字(二分搜索)do{ k=(i+j)/ 2。if(strcmp(id,word[k])=0)i= k+1。elsesym= IDENT。num= 0。do{num= 10 * num + ch39。k= k+1。}while(isdigit(ch))。} else if(ch == 39。){ getch()。=39。getch()。} else if(ch == 39。){ getch()。=39。getch()。} else// end of extra stuff { sym= ssym[ch]。} }// 漏掉空格,讀取一個字符void PL0::getch(){ if(cc == ll){if(feof(fin)){if(sym!=PERIOD)error(25)。return。fgets(line,lineLength,fin)。ll=strlen(line)。} ch= line[cc]。}// 生成目標(biāo)代碼,并送入目標(biāo)程序區(qū)void PL0::gen(fct x,int y,int z){ if(cx cxmax){coutreturn。code[cx].l= y。cx= cx+1。if((sym)==()){error(n)。for(it=()。it++)(*it)。} }//test end// 分程序分析處理過程void PL0::block(int lev,int tx,symset fsys){ if(sourceEnd)return。// data allocation index int tx0。// initial code indexdx= 3。// 表指針table[tx].= cx。if(levlevmax)error(32)。do{constdeclaration(tx,dx,lev)。constdeclaration(tx,dx,lev)。elseerror(5)。if(sym == VARSYM)// 處理變量聲明 { getsym()。while(sym == COMMA){getsym()。}if(sym ==SEMICOLON)getsym()。}while(sym==IDENT)。if(sym ==IDENT){enter(PROCEDURE,tx,dx,lev)。} elseerror(4)。elseerror(5)。(SEMICOLON)。if(sym == SEMICOLON){getsym()。for(int i= IDENT。test(tmp,fsys,6)。}symset tmp=statbegsys。test(tmp,declbegsys,7)。code[table[tx0].].a= cx。// start adr of code table[tx0].=dx。gen(INT,0,dx)。for(int i=SEMICOLON。statement(tmp,tx,lev)。// return symset s2。listcode(cx0)。tx,int amp。strcpy(table[tx].name,id)。switch(k){ case CONSTANT:if(numamax){error(31)。}table[tx].=num。case VARIABLE:table[tx].=lev。dx++。case PROCEDURE:table[tx].=lev。case ARRAY:table[tx]. = lev。} }//enter end// 查找標(biāo)示符在名字表中的位置int PL0::position(alfa id,int tx)//find identifier id in table { int i。i= tx。return i。tx,intamp。if(sym=EQLamp。sym{if(sym ==BECOMES)error(1)。if(sym == NUMBER){enter(CONSTANT,tx,dx,lev)。}elseerror(2)。} elseerror(4)。tx,intamp。getsym()。}//vardeclaration end// 數(shù)組說明處理void PL0::arraydeclaration(intamp。dx,int lev){int upscript=0,downscript=0。if(sym == NUMBER || sym == CONSTSYM){if(num == 0){upscript = num。}elseerror(32)。elseerror(32)。getsym()。else { enter(ARRAY,tx,dx,downscript+1)。} // 列出目標(biāo)代碼清單void PL0::listcode(int cx0)//list code generated for this block { int i。icout// 語句部分處理void PL0::statement(symset fsys,int tx,int lev){ if(sourceEnd)return。if(sym ==IDENT){i= position(id,tx)。else if(table[i].kind!=VARIABLE){error(12)。}getsym()。elseerror(13)。if(sym!= SEMICOLON)error(10)。} else if(sym == READSYM){ getsym()。elsedo{getsym()。elsei=0。else{gen(OPR,0,16)。}getsym()。if(sym!= RPAREN){error(33)。}elsegetsym()。if(sym==LPAREN){do{getsym()。for(int t=RPAREN。expression(tmp,tx,lev)。}while(sym==COMMA)。elsegetsym()。} else if(sym ==CALLSYM){ getsym()。else {i= position(id,tx)。else if(table[i].kind = PROCEDURE)gen(CAL,levtable[i].,table[i].)。getsym()。symset tmp=fsys。i((symbol)i)。if(sym == THENSYM)getsym()。cx1= cx。(ELSESYM)。getsym()。if(sym == ELSESYM){getsym()。gen(JMP,0,0)。statement(fsys,tx,lev)。} } else if(sym ==BEGINSYM){ getsym()。for(int i=SEMICOLON。statement(tmp,tx,lev)。(SEMICOLON)。if(sym ==SEMICOLON||sym ==ENDSYM)getsym()。getsym()。tmp=fsys。i((symbol)i)。if(sym==ENDSYM)break。} if(sym ==ENDSYM)getsym()。} else if(sym ==WHILESYM){ cx1= cx。symset tmp=fsys。condition(tmp,tx,lev)。// 記下當(dāng)前代碼分配位置,這是while的do中的語句的開始位置gen(JPC,0,0)。elseerror(18)。gen(JMP,0,cx1)。} else if(sym == REPEATSYM){symset temp1, temp2。cx1= cx。statement(temp1,tx,lev)。(SEMICOLON)。elseerror(34)。}if(sym == UNTILSYM){getsym()。gen(JPC,0,cx1)。} symset setT。}//statement end// 表達(dá)式處理void PL0::expression(symset fsys,int tx,int lev){ symbol addop。for(int t=PLUS。if(sym=PLUSamp。symaddop= sym。term(tmp,tx,lev)。} elseterm(tmp,tx,lev)。amp。getsym()。if(addop ==PLUS)gen(OPR,0,2)。} }// expression end// 項處理void PL0::term(symset fsys,int tx,int lev){ if(sourceEnd)return。symset tmp=fsys。t((symbol)t)。while(sym=TIMES amp。 symmulop= sym。factor(tmp,tx,lev)。elsegen(OPR,0,5)。test(facbegsys,fsys,24)。if(i == 0)error(11)。break。break。break。}else if(sym ==NUMBER){if(numamax){error(31)。}gen(LIT,0,num)。}else if(sym ==LPAREN){getsym()。(RPAREN)。if(sym ==
點擊復(fù)制文檔內(nèi)容
合同協(xié)議相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1