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

正文內(nèi)容

語法分析器的設(shè)計畢業(yè)設(shè)計word格式-免費閱讀

2026-01-02 02:20 上一頁面

下一頁面
  

【正文】 memcpy(temp,selectSET[i],strlen(selectSET[i]))。\039。 for(i=0。rightStr[i][0]==39。 } /*************求每一產(chǎn)生式的 selectset 集合 ************ 算法 : 對產(chǎn)生式 A→ x其 SELECT 集為 : x不能推出空字時 ,SELECT(A→ x)=FIRST(x) x可推出空字時 ,SELECT(A→ x)=FIRST(x){ε } U FOLLOW(A) /**************************************************/ for(i=0。i++) { printf(\tFIRST( %s ) = { %s }\n,rightStr[i],firstSET[i])。j=(int)strlen(non_ter)1。j++) { printf(%d ,someDerivateEpsilon(allSymbol[j]))。 } /**************************************************/ printf(\n 可推出空字的非終結(jié)符 :%s,epsilon)。j=(int)strlen(allSymbol)1。\039。\039。 //求 FIRST(β ) join(followSET[i],FirstForFollow,false)。139。\039。039。j=Pcount1。\039。 else join(FirstForFollow,temp,true)。 else join(FirstForFollow,singleFIRST[m],false)。k=length1。 } else { memcpy(FirstForFollow,singleFIRST[j],strlen(singleFIRST[j]))。39。 length=strlen(p)。\039。 firsted[m]=39。\039。039。) { temp[0]=rightStr[j][0]。 //求所有能直接推出 (ε )空字的符號 ,結(jié)果保存到 epsilon[]中 allHasEpsilon(ch)。 } } } /************************************************** 求單個符號的 FIRST 集 把求得結(jié)果保存到 singleFIRST[]數(shù)組 算法 : (1)若 X∈ VT,則 FIRST(X)={X}。\039。k=j1。 if(leftStr[i]==c) //找一個左部為 c 的產(chǎn)生式 { j=strlen(rightStr[i])。 char temp[20]。i++) { if(rightStr[i][0]==champ。 //目串中已含有源串中的字符 ,內(nèi)循環(huán)結(jié)束 if(j==(int)strlen(destination)) { destination[j]=source[i]。amp。 fprintf(outparse, 原因 : 非 終 結(jié) 符 %c 未 曾 在 產(chǎn) 生 式 左 部 出現(xiàn) !\n,rightStr[i][j])。 exit(0)。rightStr[i][j]!=39。 system(pause)。 } } /************************************************** 檢查讀入文法的正確性 checkproduce **************************************************/ void checkP() { int i,j。//終結(jié)符 terSymbol[] /**************************************************/ for(i=0。\039。amp。rightTmp[i]=90||rightTmp[i]==39。i++) if(NTtmp==Vn[i]) break。39。 vnIndex=0。//非終結(jié)符集 nonterSymbol set char Vt[200]。 gramNewSet[i].formula[1]=39。 rightStr[Pcount][m]=39。 else//產(chǎn)生式形如 ABb|c,分解為 ABb 和 Ac { leftStr[Pcount]=point[0]。 m=0。 m=0。j++) { if(point[j]!=39。 rightStr[Pcount][0]=39。BaA39。\039。j=(int)strlen(point)1。 fprintf(outparse,消除左遞歸時出錯 .原因 :沒有足夠的符號 (字母 )可用 .\n)。αA39。i++) { if(point[k]=point[0]) return 1。 if(ch90) return(39。 if(strlen(p)==0) return false。 //記錄可直接推出 (ε )的符號 char tempEpsilon[100]。//各產(chǎn)生式右部的 FIRST 集合 char followSET[100][100]。 //原始的產(chǎn)生式數(shù)目 int Pcount=0。i++) 求 temp 的長度 length if i 指向的當前產(chǎn)生式的左部等于上一條產(chǎn)生式的左部 then 把 SELECT(i)并入到 temp 數(shù)組中 If temp 的長度小于 length 加上 SELECT (i)的長度 返回 0 else 把 temp 清空 把 SELECT (i)存放到 temp 中 結(jié)果返回 1; 源碼 /*************************************************** LL(1)parsing grammar 25/4/2021 ***************************************************/ include include include include iostream include using namespace std。 (1)對于 文法開始符號 S,因為 S S,故 ?FOLLOW(S); (2)若 A→ ??B?,其中 B?VN, ??(VT ?VN)*、 ??(VT ?VN)+,則 FIRST(?){?}?FOLLOW(B); (3)若 A→ ??B 或 A→ ??B? (?? ??),則 FOLLOW(A) ?FOLLOW(B)。首先輸入定義好的文法書寫文件 (所用的文法可以用 LL(1)分析 ),然后建立詞法分析器,包括詞法分析主程序、掃描器部分、關(guān)鍵字表等。經(jīng)詞法分析后分別計算所輸入的文法的每個非終結(jié)符號的 FIRST 集合,每個非終結(jié)符號的 FOLLOW 集合,以及每個規(guī)則的 SELECT 集合,并判斷任意一個非終結(jié)符號的任意兩個規(guī)則的 SELECT 集的交集是不 是都為空,如果是則輸入文法符合 LL(1)文法則可以進行分析。 FOLLOW 集的算法描述如下: void FOLLOW(int i) X 為待求的非終結(jié)符 把當前字符放到一臨時數(shù)組 tempFOLLOW[]中 ,標識求已求其 FOLLOW集 .避免循環(huán)遞歸 if X 為 開始符號 then ∈ FOLLOW(X) 對全部的產(chǎn)生式 找一個右部含有當前字符 X 的產(chǎn)生式 注: 比如求 FOLLOW(B)則找 A→ α X 或 A→ ?X?(? ε )的產(chǎn)生式 if X 在產(chǎn)生式右部的最后 (形如產(chǎn)生式 A→ ?X) then 查找非終結(jié)符 A 是否已經(jīng)求過其 FOLLOW 集 .避免循環(huán)遞歸 if 非終結(jié)符 A 已求過其 FOLLOW 集 then FOLLOW(A)∈ FOLLOW(X) 繼續(xù)查下一條產(chǎn)生式是否含有 X else 求 A 之 FOLLOW 集 ,并 標識為 A 已求其 FOLLOW 集 else if X 不在產(chǎn)生式右部的最后 (形如 A→ ?B?) then if 右部 X 后面的符號串 ?能推出 空字 ? then 查找 ?是否已經(jīng)求過其 FOLLOW 集 .避免循環(huán)遞歸 if 已求過 ?的 FOLLOW 集 then FOLLOW(A)∈ FOLLOW(B) 結(jié)束本次循環(huán) else if ?不能推出空字 then 求 FIRST(?) 把 FIRST(?)中所有非空元素加入到 FOLLOW(B)中 標識當前要求的非終結(jié)符 X 的 FOLLOW 集已求過 SELECT 集 SELECT 集的構(gòu)造算法如下: 對所有的規(guī)則產(chǎn)生式 A→ x: (1)若 x 不能推出空字 ?,則 SELECT(A→ x) = FIRST(x); (2)若 x 可推出空字 ?,則 SELECT(A→ x)=FIRST(x)– {?} ? FOLLOW(A)。 /**************************************************/ //用于指向輸入輸出文件的指針 FILE *inparse,*outparse,*inscan。 //分解的產(chǎn)生式的個數(shù) char startSymbol。 //各產(chǎn)生式左部的 FOLLOW 集合 char singleFIRST[100][100]。 //求 someDerivateEpsilon()時使用 ,標識此字符已查找其是否可推出空字 /***************************************************/ int validity=1。 for(i=0。$39。//含有直接左遞歸 else if(point[k]!=point[0]amp。|ε 來代替 . PS:這里只是消除直接左遞歸 **************************************************/ void DirectLetfRecursive(char *point) { //point 指針指向傳遞過來的完整的產(chǎn)生式 int i,j。 system(pause)。j++) { if(point[n]==point[0]) { //如果 |后的首符號和左部相同 //AABa|Ac for(j=n+1。)//沒到產(chǎn)生式尾部且不等于 | temp[m++]=point[j++]。 m=0。39。|39。 Pcount++。 } } } /************************************************** 分解不含有左遞歸的產(chǎn)生式 ABb|c **************************************************/ void nonLeftRecursive(char *point) { //指針 point 指向當前要分解的產(chǎn)生式 ABb|c int m=0,j。 memcpy(rightStr[Pcount],temp,m)。\039。39。//終結(jié)符集 terSymbol set int tmpIndex。 while(!feof(inparse)) { //查找特定產(chǎn)生式的位置是否含有 字符串 //檢查是否是正確的產(chǎn)生式 if(fscanf(inparse,%c%s\r\n,amp。 gramOldSet[tmpIndex].formula[2]=39。 //求新非終結(jié)符號 if(i==vnIndex) { Vn[vnIndex]=NTtmp。|39。rightTmp[i]=90) { for(k=0。 Vn[vnIndex]=39。igrammarNum。 for(i=0。 exit(0)。39。 } if(rightStr[i][j]=65amp。 printf(\n 按回車鍵結(jié)束 ...)。source[i]==39。 //把源串并入到目串的尾部 de
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1