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

正文內(nèi)容

預(yù)測(cè)分析表的構(gòu)造word格式-資料下載頁(yè)

2024-12-06 02:57本頁(yè)面

【導(dǎo)讀】為所輸入的文法構(gòu)造預(yù)測(cè)分析表。設(shè)計(jì)功能性界面和數(shù)據(jù)性界面。為簡(jiǎn)單起見(jiàn),文法符號(hào)暫用單字符表示。以表格形式輸出預(yù)測(cè)分析表。在自上而下的分析法中,主要是研究LL分析法。語(yǔ)法分析程序的三個(gè)組成部分之一。它的解決步驟是,首先接收到用戶(hù)輸入的一。當(dāng)文法滿(mǎn)足條件后,再分別構(gòu)造文法。我們?nèi)菀卓闯龃宋姆](méi)有左公因子也沒(méi)有二義性,但卻存在兩個(gè)直接左遞歸,U→Ux|y的產(chǎn)生式,引入一個(gè)新的非終結(jié)符U'顯然改寫(xiě)后,U和U'都不是含左遞歸的非終結(jié)符。

  

【正文】 。\039。 merge(fo,temp,1)。 if(c==start) { /*若為開(kāi)始符號(hào) */ temp[0]=39。39。 temp[1]=39。\039。 merge(follow[i],temp,1)。 } for(j=0。j=count1。j++) { if(in(c,right[j])==1) /*找一個(gè)右部含有 c 的產(chǎn)生式 */ { for(k=0。k++) if(right[j][k]==c) break。 /*k 為 c 在該產(chǎn)生式右部的序號(hào) */ for(m=0。m++) if(v[m]==left[j]) break。 /*m 為產(chǎn)生式左部非終結(jié)符在所有符號(hào)中的序號(hào) */ if(k==strlen(right[j])1) { /*如果 c 在產(chǎn)生式右部的最后 */ if(in(v[m],fo)==1) 沈陽(yáng)航空工業(yè)學(xué)院課程設(shè)計(jì)報(bào)告 29 { merge(follow[i],follow[m],1)。 continue。 } if(F[m]==39。039。) { FOLLOW(m)。 F[m]=39。139。 } merge(follow[i],follow[m],1)。 } else { /*如果 c 不在產(chǎn)生式右部的最后 */ for(n=k+1。n=strlen(right[j])1。n++) { empt[0]=39。\039。 result*=_emp(right[j][n])。 } if(result==1) { /*如果右部 c 后面的符號(hào)串能推出 ^*/ if(in(v[m],fo)==1) { /*避免循環(huán)遞歸 */ merge(follow[i],follow[m],1)。 continue。 } if(F[m]==39。039。) { FOLLOW(m)。 F[m]=39。139。 } merge(follow[i],follow[m],1)。 } for(n=k+1。n=strlen(right[j])1。n++) temp[nk1]=right[j][n]。 temp[strlen(right[j])k1]=39。\039。 FIRST(1,temp)。 merge(follow[i],TEMP,2)。 } } } F[i]=39。139。 } //判斷讀入文法是否為一個(gè) LL(1)文法 int ll1() 沈陽(yáng)航空工業(yè)學(xué)院課程設(shè)計(jì)報(bào)告 30 { int i,j,length,result=1。 char temp[50]。 for(j=0。j=49。j++) { /*初始化 */ first[j][0]=39。\039。 follow[j][0]=39。\039。 first1[j][0]=39。\039。 select[j][0]=39。\039。 TEMP[j]=39。\039。 temp[j]=39。\039。 f[j]=39。039。 F[j]=39。039。 } for(j=0。j=strlen(v)1。j++) first2(j)。 /*求單個(gè)符號(hào)的 FIRST 集合 */ for(i=0。i=count1。i++) FIRST(i,right[i])。 /*求 FIRST*/ printf(\n)。 for(j=0。j=strlen(non_ter)1。j++) { /*求 FOLLOW*/ if(fo[j]==0) { fo[0]=39。\039。 FOLLOW(j)。 } } for(i=0。i=count1。i++) { /*求每一產(chǎn)生式的 SELECT 集合 */ memcpy(select[i],first[i],strlen(first[i]))。 select[i][strlen(first[i])]=39。\039。 for(j=0。j=strlen(right[i])1。j++) result*=_emp(right[i][j])。 if(strlen(right[i])==1amp。amp。right[i][0]==39。^39。) result=1。 if(result==1) { for(j=0。j++) if(v[j]==left[i]) break。 merge(select[i],follow[j],1)。 } } memcpy(temp,select[0],strlen(select[0]))。 沈陽(yáng)航空工業(yè)學(xué)院課程設(shè)計(jì)報(bào)告 31 temp[strlen(select[0])]=39。\039。 for(i=1。i=count1。i++) { /*判斷輸入文法是否為 LL(1)文法 */ length=strlen(temp)。 if(left[i]==left[i1]) { merge(temp,select[i],1)。 if(strlen(temp)length+strlen(select[i])) return(0)。 } else { temp[0]=39。\039。 memcpy(temp,select[i],strlen(select[i]))。 temp[strlen(select[i])]=39。\039。 } } return(1)。 } //構(gòu)造分析表 M void MM() { int i,j,k,m。 for(i=0。i=19。i++) for(j=0。j=19。j++) M[i][j]=1。 i=strlen(termin)。 termin[i]=39。39。 /*將 加入終結(jié)符數(shù)組 */ termin[i+1]=39。\039。 for(i=0。i=count1。i++) { for(m=0。m++) if(non_ter[m]==left[i]) break。 /*m 為產(chǎn)生式左部非終結(jié)符的序號(hào) */ for(j=0。j=strlen(select[i])1。j++) { if(in(select[i][j],termin)==1) { for(k=0。k++) if(termin[k]==select[i][j]) break。 /*k 為產(chǎn)生式右部終結(jié)符的序號(hào) */ M[m][k]=i。 } } 沈陽(yáng)航空工業(yè)學(xué)院課程設(shè)計(jì)報(bào)告 32 } } //一個(gè)用戶(hù)調(diào)用函數(shù) void menu() { void func()。 printf(\n********************歡迎使用預(yù)測(cè)分析表生 成系統(tǒng) *******************\n\n)。 printf( 2. 生成預(yù)測(cè)分析表 其它鍵退出 \n)。 printf(*******************************************************************\n\n)。 scanf(%d,amp。choose1)。 func()。 } //一個(gè)功能調(diào)用函數(shù) void func() { int i,j。 switch(choose1) { case 1: { printf(*********************************************************************\n)。 start=grammer(termin,non_ter,left,right)。 /*讀入一個(gè)文法 */ printf(*********************************************************************\n)。 printf(分解后的產(chǎn)生式共 %d 條 :\n,count)。 strcpy(v,non_ter)。 strcat(v,termin)。 printf(***********************************************************************)。 for(i=0。i=count1。i++) printf(%d. %c%s\n,i,left[i],right[i])。 printf(***********************************************************************)。 menu()。 break。 } case 2: { if(validity==1) validity=judge()。 if(validity==1) { ll=ll1()。 if(ll==0) printf(\n 該文法不是一個(gè) LL1 文法! )。 else printf(預(yù)測(cè)分析表已生成! \n)。 } menu()。 break。 沈陽(yáng)航空工業(yè)學(xué)院課程設(shè)計(jì)報(bào)告 33 } case 3: { int k。 if(ll==0) return。 MM()。 printf(\nLL(1)預(yù)測(cè)分析表如下 \n)。 for(i=0。i=strlen(termin)。i++) printf()。 printf(\n| | %c |,termin[0])。 for(i=1。istrlen(termin)1。i++) printf( %c |,termin[i])。 printf( %c |\n,termin[strlen(termin)1])。 for(i=0。i=strlen(termin)。i++) printf()。 printf(\n)。 for(i=0。istrlen(non_ter)。i++) { printf(| %c |,non_ter[i])。 for(j=0。jstrlen(termin)。j++) { if(M[i][j]=0) printf( %d |,M[i][j])。 else printf( |)。 } printf(\n)。 fo
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1