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

正文內(nèi)容

編譯原理課程設(shè)計(jì)教學(xué)大綱優(yōu)秀范文5篇-資料下載頁(yè)

2024-10-20 16:03本頁(yè)面
  

【正文】 一個(gè)保留字對(duì)應(yīng)的symbol類(lèi)型symbol ssym[100]。// 一些符號(hào)對(duì)應(yīng)的symbol類(lèi)型表合 char mnemonic[8][6]。// 類(lèi)PCODE指令助記符表symset declbegsys,statbegsys,facbegsys。// 聲明開(kāi)始、表達(dá)式開(kāi)始和項(xiàng)開(kāi)始符號(hào)集 Table table[txmax+1]。// 符號(hào)表FILE* fin,*fout。public:PL0(char* source,char*destination)。~PL0(){fclose(fin),fclose(fout)。}void error(int n)。位置和出錯(cuò)代碼void getsym()。個(gè)單詞void getch()。個(gè)字符void gen(fct x,int y,int z)。程序區(qū)void test(symset s1,symset s2,int n)。合法void block(int lev,int tx,symset fsys)。void enter(obj0 k,int amp。tx,int amp。dx,int lev)。int position(alfa id,int tx)。的位置void constdeclaration(intamp。tx,intamp。dx,int lev)。void vardeclaration(intamp。tx,intamp。dx,int lev)。void listcode(int cx0)。void statement(symset fsys,int tx,int lev)。void expression(symset fsys,int tx,int lev)。void term(symset fsys,int tx,int lev)。void factor(symset fsys,int tx,int lev)。void condition(symset fsys,int tx,int lev)。void arraydeclaration(intamp。 tx,intamp。 dx,int lev)。void interpret()。執(zhí)行程序int base(int l,int b,int s[])?;刂穠oid SaveCode()。// 構(gòu)造函數(shù)// 析構(gòu)函數(shù)// 出錯(cuò)處理,打印出錯(cuò)// 詞法分析,讀取一// 漏掉空格,讀取一// 生成目標(biāo)代碼,并送入目標(biāo)// 測(cè)試當(dāng)前單詞符號(hào)是否// 分程序分析處理過(guò)程// 登入名字表// 查找標(biāo)示符在名字表中// 常量定義處理// 變量說(shuō)明處理// 列出目標(biāo)代碼清單// 語(yǔ)句部分處理// 表達(dá)式處理// 項(xiàng)處理// 因子處理// 條件處理// 數(shù)組說(shuō)明處理// 對(duì)目標(biāo)代碼的解釋// 通過(guò)靜態(tài)鏈求出數(shù)據(jù)區(qū)的 // 保存代碼}。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: 漏掉了‘,’或‘?!? ”error 0006: 過(guò)程說(shuō)明后的符號(hào)不正確(應(yīng)是語(yǔ)句開(kāi)始符或過(guò)程開(kāi)始符)“, ”error 0007: 應(yīng)是語(yǔ)句開(kāi)始符“, ”error 0008: 過(guò)程體內(nèi)語(yǔ)句部分的后跟符不正確“, ”error 0009: 程序皆為丟了句號(hào)‘.’“, ”error 0010: 語(yǔ)句之間漏了‘?!? ”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或?!? ”error 0018: while型循環(huán)語(yǔ)句中丟了do“, ”error 0019: 語(yǔ)句后的標(biāo)識(shí)符不正確“, ”error 0020: 應(yīng)為關(guān)系運(yùn)算符“, ”error 0021: 表達(dá)式內(nèi)標(biāo)識(shí)符屬性不能是過(guò)程“, ”error 0022: 表達(dá)式中漏掉了右括號(hào)‘)’“, ”error 0023: 因子后的非法符號(hào)“, ”error 0024: 表達(dá)式開(kāi)始符不能是此符號(hào)“, ”error 0025: 文件在不該結(jié)束的地方結(jié)束了“, ”error 0026: 結(jié)束符出現(xiàn)在不該結(jié)束的地方“, ”error 0027: “,”error 0028: “,”error 0029: “,”error 0030: “, ”error 0031: 數(shù)越界“, ”error 0032: read語(yǔ)句括號(hào)中標(biāo)識(shí)符不是變量“, ”error 0033: else附近錯(cuò)誤“ , ”error 0034: repeat附近錯(cuò)誤“}。// PL0構(gòu)造函數(shù)PL0::PL0(char* source,char*destination){ listswitch=true,sourceEnd=false。strcpy(word[1],”begin“)。// 初始化存儲(chǔ)保留字strcpy(word[2],”call“)。strcpy(word[3],”const“)。strcpy(word[4],”do“)。strcpy(word[5],”else“)。strcpy(word[6],”end“)。strcpy(word[7],”if“)。strcpy(word[8],”odd“)。strcpy(word[9],”procedure“)。strcpy(word[10],”read“)。strcpy(word[11],”repeat“)。strcpy(word[12],”then“)。strcpy(word[13],”until“)。strcpy(word[14],”var“)。strcpy(word[15],”while“)。strcpy(word[16],”write“)。wsym[1]= BEGINSYM。wsym[2]= CALLSYM。留字對(duì)應(yīng)的symbol類(lèi)型wsym[3]= CONSTSYM。wsym[4]= DOSYM。wsym[5]= ELSESYM。wsym[6]= ENDSYM。wsym[7]= IFSYM。wsym[8]= ODDSYM。wsym[9]= PROCSYM。wsym[10]= READSYM。wsym[11]= REPEATSYM。wsym[12]= THENSYM。wsym[13]= UNTILSYM。wsym[14]= VARSYM。wsym[15]= WHILESYM。wsym[16]= WRITESYM。memset(code,0,sizeof(code))。memset(ssym,0,100*sizeof(symbol))。memset(table,0,sizeof(table))。memset(line,0,sizeof(line))。ssym[39。+39。]= PLUS。類(lèi)型表ssym[39。39。]= MINUS。ssym[39。*39。]= TIMES。ssym[39。/39。]= SLASH。ssym[39。(39。]= LPAREN。ssym[39。)39。]= RPAREN。ssym[39。=39。]= EQL。ssym[39。,39。]= COMMA。ssym[39。.39。]= PERIOD。// 初始化保留字表中每一個(gè)保// 初始化一些符號(hào)對(duì)應(yīng)的symbolssym[39。39。]= NEQ。ssym[39。39。]= GTR。ssym[39。39。]= SEMICOLON。strcpy(mnemonic[LIT],” lit “)。// 初始化類(lèi)PCODE指令助記符表strcpy(mnemonic[OPR],” opr “)。strcpy(mnemonic[LOD],” lod “)。strcpy(mnemonic[STO],” sto “)。strcpy(mnemonic[CAL],” cal “)。strcpy(mnemonic[INT],” int “)。strcpy(mnemonic[JMP],” jmp “)。strcpy(mnemonic[JPC],” jpc “)。(CONSTSYM),(VARSYM),(PROCSYM)。// 初始化聲明開(kāi)始符號(hào)集合 (BEGINSYM),(CALLSYM),(IFSYM),(WHILESYM)。// (IDENT),(NUMBER),(LPAREN)。// 初始化項(xiàng)開(kāi)始符號(hào)集合err= 0。cc= 0。// 行緩沖區(qū)指針cx= 0。// 代碼分配指針,代碼生成模塊總在cx所指位置生成新的代碼ll= 0。// 行緩沖區(qū)長(zhǎng)度ch= 39。 39。// last character read}kk= al。// 引入此變量是出于程序性能考慮 codeNo=0。// code line =fopen(source,”r“)。fout=fopen(destination,”w“)。// 出錯(cuò)處理,打印出錯(cuò)位置和出錯(cuò)代碼 void PL0::error(int n){ char s[10]。sprintf(s,”第 %d 行:“,codeNo)。(s+errStr[n])。err= err+1。//error count }//error end // 詞法分析,讀取一個(gè)單詞void PL0::getsym(){ if(sourceEnd)return。int i,j,k。while(ch ==39。 39。||ch==9)getch()。// cls space and tab if(isalpha(ch))// id or reserved word {k=0。memset(a,0,al+1)。// 檢測(cè)一個(gè)單詞長(zhǎng)度 do{ if(k al){a[k]= ch。k= k+1。} getch()。if(sourceEnd)return。}while(isalpha(ch)||isdigit(ch))。if(k = kk)kk = k。else { do{a[kk]= 39。 39。kk= kk1。}while(kk k)。} strcpy(id,a)。i= 1。j= norw。// 判斷是否是關(guān)鍵字(二分搜索)do{ k=(i+j)/ 2。if(strcmp(id, word[k])j= k1。if(strcmp(id,word[k])=0)i= k+1。}while(i j)sym= wsym[k]。elsesym= IDENT。} else if(isdigit(ch))// number { k= 0。num= 0。sym= NUMBER。do{num= 10 * num + ch39。039。k= k+1。getch()。}while(isdigit(ch))。if(k nmax)error(30)。} else if(ch == 39。:39。){ getch()。if(ch == 39。=39。){sym= BECOMES。getch()。} elsesym= NUL。} else if(ch == 39。// extra stuff added to support 39。){ getch()。if(ch == 39。=39。){sym= GEQ。getch()。} elsesym= GTR。} else// end of extra stuff { sym= ssym[ch]。// 其它符號(hào)的賦值getch()。} }// 漏掉空格,讀取一個(gè)字符void PL0::getch(){ if(cc == ll){if(feof(fin)){if(sym!=PERIOD)error(25)。sourceEnd=true。return。}cc= 0。fgets(line,lineLength,fin)。codeNo++。ll=strlen(line)。if(line[ll1]==10)ll。} ch= line[cc]。cc= cc+1。}// 生成目標(biāo)代碼,并送入目標(biāo)程序區(qū)void PL0::gen(fct x,int y,int z){ if(cx cxmax){coutreturn。}code[cx].f= x。code[cx].l= y。code[cx].a= z。cx= cx+1。}//gen end// 測(cè)試當(dāng)前單詞符號(hào)是否合法void PL0::test(symset s1,symset s2,int n){ if(sourceEnd)return。if((sym)==()){error(n)。symset::iterator it。for(it=()。it!=()。it++)(*it)。//s1=s1+s2while((sym)==())getsym()。} }//test end// 分程序分析處理過(guò)程void PL0::block(int lev,int tx,symset fsys){ if(sourceEnd)return。int dx。// data allocation index int tx0。// initial table index int cx0。// initial code indexdx= 3。// 變
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1