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

正文內(nèi)容

語(yǔ)法分析器的設(shè)計(jì)畢業(yè)設(shè)計(jì)word格式-閱讀頁(yè)

2024-12-22 02:20本頁(yè)面
  

【正文】 j≤ i1, 則將 FIRST(Yj)中的一切非ε符號(hào)加進(jìn) FIRST(X);若對(duì)一切 1≤ i≤ k,均有ε∈ FIRST(Yi),則將ε∈符號(hào)加進(jìn) FIRST(X)。 int j,k,m。 char ch=39。 //求所有能直接推出 (ε )空字的符號(hào) ,結(jié)果保存到 epsilon[]中 allHasEpsilon(ch)。 singleFIRST[i][1]=39。 } else if(FindChar(X,non_ter)) //若為非終結(jié)符 { for(j=0。j++) //j 為在 所有產(chǎn)生式中的序列 { if(leftStr[j]==X) { //產(chǎn)生式右部第一個(gè)字符為終結(jié)符或空 .產(chǎn)生式 X→ a (a∈ VT)或 X→ε ,則把 a 或ε加進(jìn) FIRST(X) if(FindChar(rightStr[j][0],terSymbol)||rightStr[j][0]==39。) { temp[0]=rightStr[j][0]。\039。 } //X→ Y1Y2… Yk的產(chǎn)生式,若 Y1∈ VN,則把 FIRST(Y1)中的一切非ε符號(hào)加進(jìn) FIRST(X) else if(FindChar(rightStr[j][0],non_ter))//產(chǎn)生式右部第一個(gè)字符為非終結(jié)符 { if(rightStr[j][0]==X) continue。k++) if(allSymbol[k]==rightStr[j][0]) break。039。//求其 FIRST 集 firsted[k]=39。//標(biāo)識(shí)其為查找狀態(tài) } join(singleFIRST[i],singleFIRST[k],false)。k=(int)strlen(rightStr[j])1。\039。amp。m++) if(allSymbol[m]==rightStr[j][k+1])//獲取右部符號(hào)下一個(gè)字符在所有字符集中的位置 break。039。 firsted[m]=39。 } join(singleFIRST[i],singleFIRST[m],false)。amp。39。\039。//把空字加入到當(dāng)前字符 c 的FIRST 集 . } else break。139。 //標(biāo)識(shí)右部符號(hào)串的長(zhǎng)度 int j,k,m。 length=strlen(p)。39。39。\039。39。\039。j++) if(allSymbol[j]==p[0])//求右部符號(hào)的第一個(gè)字符 p[0]在所有字符集中的位置 j break。 firstSET[i][strlen(singleFIRST[j])]=39。 } else { memcpy(FirstForFollow,singleFIRST[j],strlen(singleFIRST[j]))。\039。j++) if(allSymbol[j]==p[0])//求右部符號(hào)的第一個(gè)字符 p[0]在所有字符集中的位置 j break。 else join(FirstForFollow,singleFIRST[j],false)。k=length1。\039。amp。m++) if(allSymbol[m]==rightStr[i][k+1]) break。 else join(FirstForFollow,singleFIRST[m],false)。amp。39。\039。 else join(FirstForFollow,temp,true)。 } } } /************************************************** 求各產(chǎn)生式左部 (非終結(jié)符 )的 FOLLOW 集 求得結(jié)果保存在 followSET 中 參數(shù) i為該符號(hào)在非終結(jié)符中的位置 算法 : (1)對(duì)于文法開(kāi)始符號(hào) S,則 ∈ FOLLOW(S); (2)若 A→α Bβ,其中 B∈ VN,α∈ (VT U VN)*、β∈ (VT UVN)+,則 FIRST(β ){ε }∈FOLLOW(B); (3)若 A→α B 或 A→α Bβ (β =*ε ),則 FOLLOW(A)∈ FOLLOW(B)。 char X,temp[20]。 //X 為待求的非終結(jié)符 temp[0]=X。\039。 //若為開(kāi)始符號(hào) 開(kāi)始符號(hào) S,則 ∈ FOLLOW(S) if(X==startSymbol) { temp[0]=39。 temp[1]=39。 join(followSET[i],temp,false)。j=Pcount1。k++) if(rightStr[j][k]==X) break。m++) if(allSymbol[m]==leftStr[j]) break。 //把 X所在產(chǎn)生式的左部非終結(jié)符的 FOLLOW 集加入到 FOLLOW(X)中 continue。039。 //求之 FOLLOW 集 followed[m]=39。 //標(biāo)識(shí)為 1 } join(followSET[i],followSET[m],false)。n=(int)strlen(rightStr[j])1。\039。 } if(result==1)//如果右部 X 后面的符號(hào)串能推出 A→α Bβ (β =*ε )則FOLLOW(A)∈ FOLLOW(B) { if(FindChar(allSymbol[m],tempFOLLOW))//查找該非終結(jié)符是否已經(jīng)求過(guò)其 FOLLOW 集 .避免循環(huán)遞歸 { join(followSET[i],followSET[m],false)。 //結(jié)束本次循環(huán) } if(followed[m]==39。) { FOLLOW(m)。139。//FOLLOW(A)∈ FOLLOW(B) } //若 A→α Bβ,其中 B∈ VN,α∈ (VT U VN)*、β∈ (VT U VN)+,則FIRST(β ){ε }∈ FOLLOW(B); for(n=k+1。n++) temp[nk1]=rightStr[j][n]。\039。 //求 FIRST(β ) join(followSET[i],FirstForFollow,false)。139。 char temp[100]。j=99。\039。\039。\039。\039。\039。\039。039。039。j=(int)strlen(allSymbol)1。 //求單個(gè)符號(hào)的 FIRST 集合 ,結(jié)果保存在 singleFIRST[]里 printf(\n 單個(gè)符號(hào)的 FIRST 集合 :\n)。 for(j=0。j++) { printf(\tFIRST( %c ) = { %s }\n,allSymbol[j],singleFIRST[j])。 } /**************************************************/ printf(\n 可推出空字的非終結(jié)符 :%s,epsilon)。 /************************************************** printf(\n 求某一符號(hào)能否推出空字 (這里用 表示空字 ,1 表示可以推出空 ):\n)。 printf({ )。 for(j=0。j++) { printf(%d ,someDerivateEpsilon(allSymbol[j]))。 } printf( })。 /*****************求 FIRST 集 ************************/ for(i=0。i++) FIRST(i,rightStr[i])。j=(int)strlen(non_ter)1。\039。 } } /*************打印各產(chǎn)生式右部符號(hào)串的 FIRST 集 ****************/ printf(\n 消除左遞歸后各產(chǎn)生式右部符號(hào)串的 FIRST 集 :\n)。 for(i=0。i++) { printf(\tFIRST( %s ) = { %s }\n,rightStr[i],firstSET[i])。 } /*****************打印各非終結(jié)符 FOLLOW****************/ printf(\n 消除左遞歸后各非終結(jié)符的 FOLLOW 集 :\n)。 for(i=0。i++) { printf(\tFOLLOW( %c ) = { %s }\n,non_ter[i],followSET[i])。 } /*************求每一產(chǎn)生式的 selectset 集合 ************ 算法 : 對(duì)產(chǎn)生式 A→ x其 SELECT 集為 : x不能推出空字時(shí) ,SELECT(A→ x)=FIRST(x) x可推出空字時(shí) ,SELECT(A→ x)=FIRST(x){ε } U FOLLOW(A) /**************************************************/ for(i=0。i++) { //先把當(dāng)前產(chǎn)生式右部的 FIRST 集 (一切非空元素 ,不包括ε )放入到當(dāng)前產(chǎn)生式的SELECT 集 . join(selectSET[i],firstSET[i],false)。j=(int)strlen(rightStr[i])1。//右部符號(hào) x可推出空字 if(strlen(rightStr[i])==1amp。rightStr[i][0]==39。) //形如產(chǎn)生式 A result=1。j++) if(allSymbol[j]==leftStr[i]) //j 為左部符號(hào)在所有字符集中的位置 break。 //x=*ε時(shí) ,把 FOLLOW(A)并入到SELECT(A→ x)中 } } /*************打印每一產(chǎn)生式的 selectset 集合 ************/ printf(\n 消除左遞歸后各產(chǎn)生式的 SELECT 集 :\n)。 for(i=0。i++) { printf(\tSELECT( %s ) = { %s }\n,gramNewSet[i].formula,selectSET[i])。 } printf(\n)。 /*******************判斷輸入文法是否為 LL(1)文法 ******** 具有相同左部的規(guī)則的 SELECT 集兩兩不相交 比較產(chǎn)生式形如 AB 和 AC 的 SELECT 集是 否相交 ,即 SELECT(AB) ∩ SELECT(AC) = Φ 為空時(shí)表示此文法為 LL(1)文法 *******************************************************/ memcpy(temp,selectSET[0],strlen(selectSET[0]))。\039。i=Pcount1。 if(leftStr[i]==leftStr[i1]) { join(temp,selectSET[i],true)。//比較兩個(gè)產(chǎn)生式的 SELECT 長(zhǎng)度 } else { temp[0]=39。 memcpy(temp,selectSET[i],strlen(selectSET[i]))。\039。 } /************************************************** 構(gòu)造分析表 analyseTable(LL(1) parsing table) M[X,a]其中 : X 是非終結(jié)符 ,a 是終結(jié)符或 1)若 a∈ SELECT(Xα ),則 M[X,a]=Xα ,其中 a∈ Vt∪ 2)M 中不能由 1)定義的元素均置為空 (1 表示出錯(cuò) ) /***************
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1