版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 目 錄引言.1第一章 概述.4 1.1設(shè)計(jì)內(nèi)容.4 1.2設(shè)計(jì)要求.4第二章 設(shè)計(jì)的基本原理.4 2.1預(yù)測分析表的構(gòu)成原理.4 2.2預(yù)測分析程序的生成.5 第三章 程序設(shè)計(jì).5 3.1總體方案設(shè)計(jì).6 3.2各模塊設(shè)計(jì).6 第四章 程序測試.7附錄 程序清單.8課 程 設(shè) 計(jì)設(shè)計(jì)題目LL(1)文法分析器學(xué)生姓名號(hào) 學(xué) 號(hào)指導(dǎo)教師專業(yè)班級(jí)2010 年 12 月 合肥工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書設(shè) 計(jì)題 目LL(1)文法分析器成績主要內(nèi)容預(yù)測分析表自動(dòng)構(gòu)造程序的實(shí)現(xiàn)設(shè)計(jì)內(nèi)容及要求:對(duì)于任意輸入的一個(gè)LL(1)文法,構(gòu)造其預(yù)測分析表。要求:首先實(shí)現(xiàn)集合FIRST(X)構(gòu)造算法和集合FOLLOW(A)
2、構(gòu)造算法,再實(shí)現(xiàn)教材P.79給出的預(yù)測分析表構(gòu)造算法。程序顯示輸出預(yù)測分析表或輸出到指定文件中。預(yù)測分析程序的實(shí)現(xiàn)設(shè)計(jì)內(nèi)容及要求:對(duì)文法 G: EE+T|T 按教材P.76表4.1構(gòu)造出G的預(yù)測分析程序, TT*F|F 程序顯示輸出如P.78那樣的匹配過程。F(E)|i指導(dǎo)教師意見該生能按時(shí)完成課程設(shè)計(jì)任務(wù)書所規(guī)定的程序設(shè)計(jì),綜合運(yùn)用所學(xué)知識(shí)獨(dú)立分析和解決問題的能力 。程序設(shè)計(jì)方案 。論文論述 ,文理 ,格式 。程序運(yùn)行結(jié)果 。程序驗(yàn)收時(shí)回答問題 。 簽名: 第一章 概述1.1 設(shè)計(jì)內(nèi)容:1:預(yù)測分析表自動(dòng)構(gòu)造程序的實(shí)現(xiàn)2:預(yù)測分析程序的實(shí)現(xiàn)1.2 設(shè)計(jì)要求 1:設(shè)計(jì)內(nèi)容及要求:對(duì)于任意輸入的
3、一個(gè)LL(1)文法,構(gòu)造其預(yù)測分析表。要求:首先實(shí)現(xiàn)集合FIRST(X)構(gòu)造算法和集合FOLLOW(A)構(gòu)造算法,再實(shí)現(xiàn)教材P.79給出的預(yù)測分析表構(gòu)造算法。程序顯示輸出預(yù)測分析表或輸出到指定文件中。 2:設(shè)計(jì)內(nèi)容及要求:對(duì)文法 G: EE+T|T 按教材P.76表4.1構(gòu)造出G的預(yù)測分析程序, TT*F|F 程序顯示輸出如P.78那樣的匹配過程。F(E)|i第二章 設(shè)計(jì)的基本原理2.1預(yù)測分析表的構(gòu)成原理對(duì)于任意給定的LL(1) 文法G,為了構(gòu)造它的預(yù)測分析表M,我們就必須構(gòu)造與文法G有關(guān)的集合First和fellow.首先我們對(duì)每一個(gè)XVT U Vn ,構(gòu)造FIRST(X),辦法是,連續(xù)使
4、用下面的規(guī)則,直至每個(gè)集合FIRST不再增大為止.(1) 若XVT,則FIRST(X)=X.(2) 若XVn ,且有產(chǎn)生式X->a,則把a(bǔ)加入到FIRST(X)中,若X->,也是一條產(chǎn)生式,則把也加到FIRST(X)中.(3) 若X->Y是一個(gè)產(chǎn)生式且YVn,則把FIRST(Y)中所有非-元素都加到FIRST(X)中,若X->Y1Y2YK ,是一個(gè)連續(xù)的產(chǎn)生式, Y1Y2Yi-1 都是非終結(jié)符,而且,對(duì)于任何j,1ji-1,FIRST(Yj) 都含有(即Y1Y2Yi-1=>),則把FIRST(Yi) 中的所有非-元素都加到FIRST(X)中,特別是,若所有的FIR
5、ST(Yj)均含有,j=1,2,k,則把加到FIRST(X)中. 對(duì)于文法G中每個(gè)非終結(jié)符A構(gòu)造FOLLOW(A)的辦法是,連續(xù)使用下面的規(guī)則,直到每個(gè)FOLLOW不在增大為止.(1) 對(duì)于文法的開始符號(hào)S,置#于FOLLOW(S)中;(2) 若A->aBb是一個(gè)產(chǎn)生式,則把FIRST(b) 加至FOLLOW(B)中;(3) 若A->aB是一個(gè)產(chǎn)生式,或A->aBb是一個(gè)產(chǎn)生式而b=>(即FIRST( b)則把FOLLOW(A)加至FOLLOW(B)中構(gòu)造分析表M的算法是:(1) 對(duì)文法G的每個(gè)產(chǎn)生式A->a執(zhí)行第二步和第三步;(2) 對(duì)每個(gè)終結(jié)符aFIRST(a
6、), 把A->a加至MA,a中;(3) 若FIRST(a),則把任何bFOLLOW(A)把A->a加至MA,b中;(4) 把所有無定義的MA,a標(biāo)上出錯(cuò)標(biāo)志.2.2 預(yù)測分析程序的生成 預(yù)測分析程序的總控程序在任何時(shí)候都是按STACK棧頂符號(hào)X和當(dāng)前的輸入符號(hào)行事的,對(duì)于任何(X,a),總控程序每次都執(zhí)行下述三種可能的動(dòng)作之一;(1) 若X=a=”#”,則宣布分析成功,停止分析過程.(2) 若X=a”#”,則把X從STACK棧頂逐出,讓a指向下一個(gè)輸入符號(hào).(3) 若X是一個(gè)非終結(jié)符,則查看分析表M,若MA,a中存放著關(guān)于X的一個(gè)產(chǎn)生式,那么,首先把X逐出STACK棧頂,然后,把產(chǎn)
7、生式的右部符號(hào)串按反序一一推進(jìn)STACK棧(若右部符號(hào)為,則意味著不推什么東西進(jìn)棧).在把產(chǎn)生式的右部符號(hào)推進(jìn)棧的同時(shí)應(yīng)做這個(gè)產(chǎn)生式相應(yīng)得語義動(dòng)作,若MA,a中存放著”出錯(cuò)標(biāo)志”,則調(diào)用出錯(cuò)診察程序ERROR. 第三章 程序設(shè)計(jì)3.1 總體方案設(shè)計(jì) 在看到這個(gè)題目后,首先想到的就是要分模塊進(jìn)行設(shè)計(jì).(1) 第一模塊:把文本文件中的LL(1)文法讀入到程序中g(shù)rammer類中的數(shù)組成員g中.(2) 第二模塊:通過對(duì)已輸入到數(shù)組g中的文法,進(jìn)行掃描,把相應(yīng)的非終結(jié)符和終結(jié)符輸入到非終結(jié)符數(shù)組VN中和終結(jié)符數(shù)組VT中.(3) 第三模塊:生成所有的非終結(jié)符的FIRST集合(4) 第四模塊:生成所有的非
8、終結(jié)符的FOLLOW集合(5) 第五模塊:生成文法的預(yù)測分析表(6) 第六模塊:生成文法的預(yù)測分析程序通過這六模塊的設(shè)計(jì),最后可連接成一個(gè)預(yù)測分析程序.3.2 各模塊程序設(shè)計(jì)首先要建立兩個(gè)類,分別是grammer類和SeqStack類Grammer類中有保存從文本文件讀入的LL(1)文法,用一個(gè)二維字符數(shù)組g保存,保存非終結(jié)符的字符數(shù)組VN,保存終結(jié)符的字符數(shù)組VT,文法開始符號(hào)字符變量begin , 元素對(duì)應(yīng)first集合中的有空字符的非終結(jié)符數(shù)組emptychar,預(yù)測分析表為二維整形數(shù)組form.SeqStack類主要的作用為在預(yù)測分析時(shí)作為符號(hào)棧.(1) 第一模塊的設(shè)計(jì):對(duì)于這個(gè)模塊的
9、設(shè)計(jì),就是用輸入流對(duì)文本文件中的文法進(jìn)行讀入當(dāng)讀到字符|或/n時(shí)意味著一個(gè)產(chǎn)生式已結(jié)束,那么相應(yīng)數(shù)組中相應(yīng)的下標(biāo)變量+1;數(shù)組gi0所存放著這個(gè)產(chǎn)生式對(duì)應(yīng)的字符的數(shù)量.gi1為這個(gè)產(chǎn)生式左邊的非終結(jié)符.(2) 第二模塊的設(shè)計(jì):在已把文法讀入到數(shù)組g中后,那么相應(yīng)的gi0為每個(gè)產(chǎn)生式的非終結(jié)符,若此非終結(jié)符不在數(shù)組VN中,那么把此字符加入到VN中對(duì)終結(jié)符的讀入,則是從每個(gè)gi2開始掃描,若此字符不在非終結(jié)符數(shù)組VN中,也不在VT 中,那么就把此字符加入到VT中.(3) 第三模塊的設(shè)計(jì):生成FIRST集合這個(gè)算法基本上按照書上的原理,如對(duì)每個(gè)產(chǎn)生式進(jìn)行掃描,當(dāng)掃描到非終結(jié)符時(shí),把此字符加入到相應(yīng)非
10、終結(jié)符的FIRST集合中,若遇到非終結(jié)符時(shí),需把此非終結(jié)符的FIRST集合中除了空字符外全加入到對(duì)應(yīng)的非終結(jié)符的first集合中,這就涉及到算法的一個(gè)遞歸算法,我是利用在函數(shù)的參數(shù)表中設(shè)置倆個(gè)參數(shù),一個(gè)是FIRST數(shù)組,另外一個(gè)是非終結(jié)符,在用到遞歸時(shí),我是利用把FIRST數(shù)組設(shè)為本產(chǎn)生式第一個(gè)非終結(jié)符的FIRST數(shù)組,而非終結(jié)符參數(shù)則設(shè)置為在掃描產(chǎn)生式右部過程中所遇到的非終結(jié)符. 然后通過循環(huán)對(duì)這個(gè)文法中的所有非終結(jié)符進(jìn)行函數(shù)的調(diào)用,這樣來求到所有非終結(jié)符的FIRST集合.(4) 第四模塊的設(shè)計(jì): 生成FOLLOW集合這個(gè)算法,關(guān)鍵就是求某非終結(jié)符A的FOLLOW集合,那么就是掃描到A后面的
11、字符,若為終結(jié)符,則把此終結(jié)符加入到A的FOLLOW集合,那么若為非終結(jié)符,則把此非終結(jié)符的FIRST集合加入到A的FOLLOW集合中,若A為某個(gè)產(chǎn)生式最后一個(gè)字符,則把這個(gè)產(chǎn)生式的第一個(gè)字符的FOLLOW集合加入到A的FOLLOW集合中,在這個(gè)算法的過程中葉涉及到運(yùn)用遞歸,此遞歸的方法同樣與上述求FIRST集合中運(yùn)用的遞歸方法類似(5) 第五模塊的設(shè)計(jì): 求預(yù)測分析表的過程同樣是對(duì)每個(gè)產(chǎn)生式進(jìn)行掃描,對(duì)每個(gè)產(chǎn)生式的FIRST集合中的元素,都把相應(yīng)的產(chǎn)生式的編號(hào)寫入到對(duì)應(yīng)的預(yù)測分析表中對(duì)應(yīng)的位置(6) 第六模塊的設(shè)計(jì): 生成預(yù)測分析程序,就是把#和文法開始符號(hào)進(jìn)入到棧中,然后把相應(yīng)的分析語句中
12、當(dāng)前的輸入符號(hào)對(duì)應(yīng),在每一步過程中按照書上講到的原理,在預(yù)測分析表中找到相應(yīng)的產(chǎn)生式.第四章 程序測試附錄 程序清單class SeqStack;/聲明棧類class grammer/定義grammer類,此類的作用把文本文件中的文法保存,并且產(chǎn)生這個(gè)文法的非終結(jié)符集合,終結(jié)符集合,first集合,fellow集合,預(yù)測分析表等public:grammer();grammer();void openfile(char *);void prepareform();void buildform();void buildProcess(SeqStack& ss); private:char
13、begin; char *vt; char *g; char *vn;char *first;/這時(shí)所有非終結(jié)符的first集合char *fellow;/這是所有非終結(jié)符的fellow集合char *emptychar;/這個(gè)集合中的元素為對(duì)應(yīng)first集合中的有空字符的非終結(jié)符int *form;/這是對(duì)應(yīng)文法的預(yù)測分析表 int count;void buildVn(); void buildVt();void buildemptychar();void buildfirst();void buildfellow();void fellowzh(char *,char);void fir
14、stzh(char *,char); int search(char *,char);void printform();void outputblank(int);const int stackIncreament=20;class SeqStack/定義SeqStack類,這個(gè)類的主要作用是在對(duì)語句的預(yù)測分析過程中作符號(hào)棧public:friend grammer;SeqStack(int sz=50);SeqStack();void Push(char x);bool Pop(char& x);bool getTop(char& x);bool IsEmpty();bool
15、 IsFull();int getSize();void MakeEmpty();void showPlay();private:char *elements;int top;int maxSize;void overflowProcess();#include<fstream>#include<iostream>#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<windows.h>#include "編譯.h"using nam
16、espace std;grammer:grammer()count=0;grammer:grammer()int i;for(i=0;i<count;i+)delete gi;delete g;delete vt;delete vn;void grammer:openfile(char *file)/這個(gè)函數(shù)的主要功能在于對(duì)文本文件中的文法進(jìn)行讀入,并保存在對(duì)應(yīng)的數(shù)組中,一并產(chǎn)生對(duì)應(yīng)文法的終結(jié)符集合和非終結(jié)符集合char ch;int i,j;ifstream infile(file,ios:in);/定義文件流 if(!infile)cout<<"open err
17、or!"<<endl;exit(1);while(ch=infile.get()!=EOF)if(ch='-')if(ch=infile.get()='>')count+;elseinfile.seekg(-1,ios:cur);else if(ch='|')count+;else g=new char *count;for(i=0;i<count;i+)gi=new char 15;gi0=0; infile.clear();/能重新激活文件流infile.seekg(0,ios:beg);/定位i=0;j=1
18、;while(ch=infile.get()!=EOF)if(ch='-')if(infile.get()!='>')gij=ch;gi0+;j+;if(ch=EOF)break;elseinfile.seekg(-1,ios:cur);else if(ch='|')i+;gi1=gi-11;gi0=1;j=2;else if(ch='n')infile.seekg(-3,ios:cur);ch=infile.get();if(ch!='n')i+;j=1;infile.seekg(2,ios:cur);el
19、segij=ch;gi0+;j+;cout<<count<<endl;for(i=0;i<count;i+)for(j=1;j<=gi0;j+)cout<<gij<<" "cout<<endl;buildVn();/建立非終結(jié)符集合buildVt();/建立終結(jié)符集合void grammer:buildVn()int i=1,j=0;vn=new charcount+1;vni=gj+1;for(;j<count;j+)if(gj1!=gj-11) i+;vni=gj1;vn0=i;begin=v
20、n1;cout<<"本文法開始符為:"<<begin<<endl;cout<<"本文法非終結(jié)符為:"<<" "for(i=1;i<=vn0;i+)cout<<vni<<" "cout<<endl;void grammer:buildVt()int i=1,j=0,t;char ch;vt=new char100;vt0=0;for(;j<count;j+)t=2;for(;t<=gj0;t+)ch=gj
21、t;if(!search(vt,ch)&&!search(vn,ch)vti+=gjt;vt0+;cout<<"本文法終結(jié)符為:"<<" "for(i=1;i<=vt0;i+)cout<<vti<<" "cout<<endl;int grammer:search(char *a,char ch)/搜索函數(shù),用于在指定數(shù)組中對(duì)指定字符進(jìn)行搜尋,若存在輸出對(duì)應(yīng)的序號(hào),若不在則輸出0for(int i=1;i<=a0;i+)if(ch=ai)return
22、 i;return 0;void grammer:buildemptychar()/建立對(duì)應(yīng)first集合中含有空字符的的非終結(jié)符集合int i=0,j=2,t=1;bool flag=true,flag1;emptychar=new charvn0+1; emptychar0=0;for(;i<count;i+)if(gi2=''&&!search(emptychar,gi1)emptychart+=gi1;emptychar0+;while(flag)flag=false;for(i=0;i<count;i+)for(j=2;j<=gi0;
23、j+)if(search(emptychar,gij)flag1=true;elseflag1=false;break;if(flag1=true&&!search(emptychar,gi1)emptychart+=gi1;emptychar0+;flag=true;cout<<"First集中含有空字符的有: "for(i=1;i<=emptychar0;i+)cout<<emptychari<<" "cout<<endl;void grammer:buildfirst()int
24、i;first=new char* vn0;for(i=0;i<vn0;i+)firsti=new charvt0+1;for(i=0;i<vn0;i+)firsti0=0;for(i=1;i<=vn0;i+)firstzh(firsti-1,vni);void grammer:buildfellow()int i,j;fellow=new char* vn0;for(i=0;i<vn0;i+)fellowi=new charvt0+1;for(i=0;i<vn0;i+)fellowi0=0;for(i=1;i<=vn0;i+)fellowzh(fellow
25、i-1,vni);for(i=0;i<vn0;i+)cout<<vni+1<<"的fellow集合為: "for(j=1;j<=fellowi0;j+)cout<<fellowij<<" "cout<<endl;void grammer:firstzh(char *a,char ch)/對(duì)指定非終結(jié)符建立對(duì)應(yīng)的first集合int i,j,t=1;for(i=0;i<count;i+)for(j=2;j<=gi0;j+)if(gi1=ch)if(!search(vn,gi
26、j)&&gij!='')/找到對(duì)應(yīng)產(chǎn)生式中的終結(jié)符時(shí)if(!search(a,gij)at+=gij;a0+;break;else if(gij!='')/找到對(duì)應(yīng)的產(chǎn)生式中的非終結(jié)符時(shí)firstzh(a,gij);/用遞歸的方法算出此非終結(jié)符的first集合if(!search(emptychar,gij)/當(dāng)此非終結(jié)符的first集合中無空字符時(shí),對(duì)此產(chǎn)生式掃描完畢break;elseelsebreak;void grammer:fellowzh(char *a,char ch)/對(duì)指定非終結(jié)符建立fellow集合int i,j,k,m,n,
27、t=a0;if(ch=begin)/把#字符放入開始符的fellow集合if(!search(a,'#')a+t='#'a0+;for(i=0;i<count;i+)for(j=2;j<=gi0;j+)if(gij=ch)for(m=j;m<=gi0;m+)if(m=gi0)if(gi1!=ch)fellowzh(a,gi1);/發(fā)現(xiàn)要求的非終結(jié)符在此產(chǎn)生式的末尾時(shí)else break;elseif(!search(vn,gim+1)/當(dāng)此非終結(jié)符后面的字符為終結(jié)字符時(shí),放入對(duì)應(yīng)的fellow集合if(!search(a,gim+1)a+t=g
28、im+1;a0+;break;else k=search(vn,gim+1);/把此非終結(jié)符后面的非終結(jié)符的first集合中的元素放入對(duì)應(yīng)的fellow集合for(n=1;n<=firstk-10;n+)if(!search(a,firstk-1n)a+t=firstk-1n;a0+;if(!search(emptychar,gim+1)break;void grammer:prepareform()int i,j;buildemptychar();buildfirst();buildfellow();for(i=0;i<vn0;i+)if(search(emptychar,vni
29、+1)j=firsti0;firsti+j=''firsti0+;for(i=0;i<vn0;i+)cout<<vni+1<<"的first集合為: "for(j=1;j<=firsti0;j+)cout<<firstij<<" "cout<<endl;void grammer:buildform()int i,j,k,t,m,n;bool flag;form=new int*vn0;for(i=0;i<vn0;i+)formi=new intvt0;for(i
30、=0;i<vn0;i+)for(j=0;j<vt0;j+)formij=-1;for(i=0;i<count;i+)t=search(vn,gi1);flag=true;for(j=2;j<=gi0;j+)k=search(vt,gij);/若發(fā)現(xiàn)這個(gè)產(chǎn)生式的first集合中的對(duì)應(yīng)的終結(jié)符時(shí)if(k)if(gij!='')if(formt-1k-1!=-1)cout<<"本終結(jié)符錯(cuò)誤!"<<endl;exit(1);formt-1k-1=i;flag=false;break;else/若發(fā)現(xiàn)對(duì)應(yīng)產(chǎn)生式中的fir
31、st集合中含有空字符時(shí)for(m=1;m<=fellowt-10;m+)if(fellowt-1m!='#')/可把對(duì)應(yīng)的非終結(jié)符的fellow集合中的元素對(duì)應(yīng)的表項(xiàng)中填入該產(chǎn)生式的標(biāo)號(hào)n=search(vt,fellowt-1m);if(formt-1n-1!=-1)cout<<"有終結(jié)符本fellow集合中非#錯(cuò)誤!"<<endl;exit(1);formt-1n-1=i;elseif(formt-1k-1!=-1) cout<<"有終結(jié)符本fellow集合中#錯(cuò)誤!"<<endl
32、; exit(1);formt-1k-1=i;flag=false;break;else/找到該產(chǎn)生式中的非終結(jié)符時(shí)k=search(vn,gij);for(m=1;m<=firstk-10;m+)if(firstk-1m!='')n=search(vt,firstk-1m);if(formt-1n-1!=-1) cout<<"本first集合中非!"<<endl; exit(1); formt-1n-1=i;elseif(!search(firstk-1,'')/若在此終結(jié)符對(duì)應(yīng)的first集合中無空字符時(shí)fl
33、ag=false;break;if(flag=true)/說明該產(chǎn)生式對(duì)應(yīng)的first集合中含有空字符for(m=1;m<=fellowt-10;m+)if(fellowt-1m!='#')n=search(vt,fellowt-1m);if(formt-1n-1!=-1)cout<<"本fellow集合中非#錯(cuò)誤!"<<endl;exit(1);formt-1n-1=i;elsen=search(vt,'');if(formt-1n-1!=-1)cout<<"本fellow集合中#錯(cuò)誤!&
34、quot;<<endl;exit(1);formt-1n-1=i;printform();void grammer:outputblank(int i)int j;for(j=0;j<i;j+)cout<<" "void grammer:printform()int i,j,k,t,m;cout<<"-預(yù)測分析表如下所示-"<<endl;outputblank(6);for(i=1;i<=vt0;i+)if(vti='')cout<<"#"outp
35、utblank(10);elsecout<<vti;outputblank(10);cout<<endl;for(i=0;i<vn0;i+)cout<<" "<<vni+1;outputblank(4);for(j=0;j<vt0;j+)k=formij;if(k=-1)Sleep(500);cout<<"error"outputblank(6);elseSleep(1000);t=9-gk0;cout<<gk1<<"->"for(m
36、=2;m<=gk0;m+)cout<<gkm;outputblank(t);cout<<endl;void grammer:buildProcess(SeqStack& ss)char *dia,ch;int i,j,inlen,m,n,index=0,proc=0;bool flag=true,flag1=false;dia=new char20;cout<<"請(qǐng)輸入待分析的字符串"<<endl;cin>>dia;for(i=0,inlen=0;i<20;i+)if(diai!='0&
37、#39;)inlen+;else break;cout<<"步驟"outputblank(8);cout<<"符號(hào)棧"outputblank(15);cout<<"輸入串"outputblank(15);cout<<"所用產(chǎn)生式"<<endl;diainlen+='#' ss.Push('#');ss.Push(begin);while(flag)Sleep(1500); cout<<proc;if(proc&g
38、t;=10)outputblank(11);elseoutputblank(12);+proc;ss.showPlay();outputblank(21-ss.getSize();for(j=index;j<inlen;j+)cout<<diaj; outputblank(21-inlen+index);if(flag1=true)cout<<gformm-1n-11<<"->"for(j=2;j<=gformm-1n-10;j+)cout<<gformm-1n-1j;cout<<endl;els
39、ecout<<endl; ss.getTop(ch);m=search(vn,ch);if(diaindex!='#')n=search(vt,diaindex);else n=search(vt,''); if(search(vt,ch)/當(dāng)棧頂是終結(jié)符if(ch=diaindex)/且此終結(jié)符與輸入串此時(shí)檢測的終結(jié)符符號(hào)相同index+;ss.Pop(ch);flag1=false;else cout<<"該字符串不能由該文法推出"<<endl;exit(1);else if(ch='#')if(ch=diaindex)cout<<endl;cout<<"-分析完成-"<<endl;flag=false;else cout<<"該字符串不能由該文法推出"<<endl;exit(1);else if(formm-1n-1!=-1)/當(dāng)棧頂?shù)姆墙K結(jié)符與輸入串對(duì)應(yīng)的終結(jié)符在預(yù)測分析表中相應(yīng)的項(xiàng)存在時(shí)if(gformm-1n-12!='')ss.Pop(ch);for(i=gformm-1n-10;i>=2;i-)ss.Push(gformm-1n-1i);el
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024城市基礎(chǔ)設(shè)施建設(shè)項(xiàng)目特許經(jīng)營權(quán)協(xié)議
- 2024年幼兒園教師崗位聘任協(xié)議書模板
- 2024專業(yè)建設(shè)工程項(xiàng)目設(shè)計(jì)合同范本專業(yè)版
- 2024家庭保姆雇傭合同樣本
- 2024年先進(jìn)制造業(yè)生產(chǎn)線自動(dòng)化改造合同
- 2024年度家電行業(yè)C型鋼部件加工合同
- 2024年廢紙回收海運(yùn)出口協(xié)議
- 2024年商場清潔服務(wù)合同
- 2024年建筑工程設(shè)計(jì)與施工一體化合同
- 2024年度智能硬件設(shè)備采購與安裝合同
- 如何有效應(yīng)對(duì)學(xué)習(xí)中的困難和挑戰(zhàn)
- 醫(yī)院感染管理培訓(xùn)課件消毒劑的選擇與使用
- 平臺(tái)分銷返傭合作協(xié)議
- 中國城市行政代碼
- 低纖維蛋白原血癥的護(hù)理查房
- 數(shù)學(xué)4教材介紹
- 全國大學(xué)生職業(yè)生涯規(guī)劃大賽
- 肩關(guān)節(jié)鏡術(shù)的健康宣教
- 關(guān)于學(xué)校安全保衛(wèi)工作存在的問題及對(duì)策
- 2024年廣西鋁業(yè)集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2024年西藏開發(fā)投資集團(tuán)有限公司招聘筆試參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論