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

正文內(nèi)容

編譯原理課程設(shè)計(jì)ll遞歸下降分析器(參考版)

2024-10-29 06:36本頁(yè)面
  

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