語(yǔ)法分析報(bào)告_第1頁(yè)
語(yǔ)法分析報(bào)告_第2頁(yè)
語(yǔ)法分析報(bào)告_第3頁(yè)
語(yǔ)法分析報(bào)告_第4頁(yè)
語(yǔ)法分析報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)名稱(chēng): 年 月 日專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)1、 實(shí)驗(yàn)?zāi)康?、為初等函數(shù)運(yùn)算語(yǔ)言構(gòu)造LL(1)語(yǔ)法分析器。2、掌握LL(1)語(yǔ)法分析器的方法,加深對(duì)自上而下語(yǔ)法分析原理的理解。3、掌握設(shè)計(jì)、編制并調(diào)試LL(1)語(yǔ)法分析程序的思想和方法。2、實(shí)驗(yàn)內(nèi)容一、根據(jù)初等函數(shù)運(yùn)算語(yǔ)言運(yùn)算法則,將語(yǔ)法模式用上下文無(wú)關(guān)文法表達(dá)。注意運(yùn)算的優(yōu)先性,避免產(chǎn)生二義性文法。二、將上述文法改寫(xiě)為L(zhǎng)L(1)文法。三、根據(jù)LL(1)文法給出預(yù)測(cè)分析表。四、根據(jù)預(yù)測(cè)分析表,給出解析LL(1)文法的遞歸下降子程序。五、本語(yǔ)法分析程序的輸入是實(shí)驗(yàn)一生成的記號(hào)流;本程序需定義語(yǔ)法樹(shù)的數(shù)據(jù)結(jié)構(gòu);語(yǔ)法分析的輸出是一

2、棵語(yǔ)法樹(shù)。六、當(dāng)輸入存在語(yǔ)法錯(cuò)誤時(shí),需給出語(yǔ)法錯(cuò)誤的提示,指出語(yǔ)法錯(cuò)誤發(fā)生的位置和錯(cuò)誤類(lèi)型。注:實(shí)驗(yàn)前,修改了詞法分析,使其生成的記號(hào)流輸出到一個(gè)文本文件a.txt中,本實(shí)驗(yàn)是從a.txt中讀取記號(hào)流對(duì)其進(jìn)行語(yǔ)法分析2.1 上下文無(wú)關(guān)文法S0àS?B|SàA;S|Aàid=BBàB+T|B-T|TTàT*F|T/F|FFàE|sinE|cosE|tgE|ctgE|logE|log(E,E)|lgE|lnE|EEEà(B)|-E|id|num注:本文法的?前面是一些賦值語(yǔ)句(如:a=x+y;) ?后面是一個(gè)算術(shù)表達(dá)式(如a+b

3、*sin(y)# 沒(méi)有分號(hào),以#結(jié)束)2.2 LL(1)文法S0àS?B|SàA;S|Aàid=BBàTB1B1à+TB1|-TB1|TàFT1T1à*FT1|/FT1|FàEL|logN| sinE|cosE|tgE|ctgE| lgE|lnELàE|Nà(B,B)|EEà(B)|-E|id|num2.3 First集和Follow集First(E)= ( - id num First(F)= ( - id num sin cos tg ctg log lg ln First(T1)

4、= * / First(T)= ( - id num sin cos tg ctg log lg ln First(B1)= + - First(B)= ( - id num sin cos tg ctg log lg ln First(A)= id First(S)= id First(S0)=id ? First(N)= ( - id num sin cos tg ctg log lg ln First(L)= Follow(S0)= # Follow(S)= ? Follow(B1)= ) ; # , Follow(T1)= + - ) # ; , Follow(L)= * / + -

5、) # ; 記號(hào)表符號(hào)SinCostgctgloglgln();?+記號(hào)01234567891011符號(hào)-*/=常量num變量id無(wú)法識(shí)別的標(biāo)示符,#記號(hào)121314151617181920212223預(yù)測(cè)分析表:其中fun代表sin,cos,tg,ctg,lg,ln3、 實(shí)驗(yàn)程序清單輸入記號(hào)流a.txt語(yǔ)法分析器.cpp語(yǔ)法分析報(bào)告.doc4、 調(diào)試過(guò)程和運(yùn)行結(jié)果輸出的是運(yùn)用產(chǎn)生式展開(kāi)的過(guò)程、匹配情況、以及出錯(cuò)處理情況,以及先序遍歷語(yǔ)法二叉樹(shù)5、 程序的主要部分及其功能說(shuō)明void matcht(string t1)/t為終結(jié)符if(checkt(t1)/t1為終結(jié)符/checkt(stri

6、ng data)判斷一個(gè)符號(hào)是否為終結(jié)符,若是則返回true while(pare("23")!=0&&checkt(t1)/!=# if(pare(ai)=0) cout<<t1<<"匹配"<<endl;q.pop();i+;t=q.top();t1=t->data; else cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl;

7、i+;/跳過(guò)錯(cuò)誤break; /while if(pare(ai)=0&&checkt(t1)/t1=23cout<<t1<<"匹配"<<endl;elseif(checkt(t1)cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl;i+;/跳過(guò)錯(cuò)誤elsematchnt(t1);void matchnt(string m)/非終結(jié)符 if(pare(S0)=0) t=

8、q.top();q.pop();if(pare("17")=0|pare("10")=0)t->rchild=NULL;t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data=S;t->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lchild->rchil

9、d->rchild=NULL;t->lchild->rchild->data="10"/?t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->data=B;cout<<t->lchild->data<&

10、lt;" "<<t->lchild->rchild->data<<" "<<t->lchild->rchild->rchild->data<<endl;q.push(t->lchild->rchild->rchild);/Bq.push(t->lchild->rchild);/?q.push(t->lchild);/St=q.top();if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->dat

11、a);elsematchnt(t->data);elseif(pare("23")/# t->lchild=new Bitnode; t->lchild->data=; t->rchild=NULL; t->lchild->lchild=NULL; t->lchild->rchild=NULL; cout<<t->lchild->data<<endl; t=q.top();if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);e

12、lsematchnt(t->data);else cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl;i=i+1;q.push(t);matchnt(t->data); /S0if(pare(S)=0)t=q.top();q.pop();if(pare("17")=0)t->lchild=new Bitnode;/t=s0->lchild;即st->lchild->lchi

13、ld=NULL;t->lchild->rchild=NULL;t->lchild->data=A; t->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild->data="9"/;t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->

14、;rchild->lchild=NULL;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->data=S;cout<<t->lchild->data<<" "<<t->lchild->rchild->data<<" "<<t->lchild->rchild->rchild->data<<endl;

15、q.push(t->lchild->rchild->rchild);/Sq.push(t->lchild->rchild);/9q.push(t->lchild);/At=q.top();if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data);else if(pare("10")=0) t->lchild=new Bitnode; t->lchild->data="" t->rchild=NU

16、LL; t->lchild->lchild=NULL; t->lchild->rchild=NULL; cout<<t->lchild->data<<endl; t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data); else cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<

17、;endl;i=i+1;q.push(t);matchnt(t->data);/Sif(pare(A)=0)t=q.top();q.pop();if(pare("17")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="17"/idt->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=

18、NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild->data="15"/=t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->data=B;cout<<

19、;t->lchild->data<<" "<<t->lchild->rchild->data<<" "<<t->lchild->rchild->rchild->data<<endl;q.push(t->lchild->rchild->rchild);q.push(t->lchild->rchild);q.push(t->lchild);t=q.top();if(checkt(t->data)/如果棧頂

20、為終結(jié)符 matcht(t->data);elsematchnt(t->data);elsecout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl;i=i+1;q.push(t);matchnt(t->data);/Aif(pare(B)=0)t=q.top();q.pop();if(pare("17")=0|pare("16")=0|pare(&qu

21、ot;12")=0|pare("7")=0|pare("0")=0|pare("1")=0|pare("2")=0|pare("3")=0|pare("4")=0|pare("5")=0|pare("6")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->l

22、child->rchild=NULL;t->lchild->data=T;t->lchild->rchild=new Bitnode;t->lchild->rchild->rchild=NULL;t->lchild->rchild->lchild=NULL;t->lchild->rchild->data=B1;cout<<t->lchild->data<<" "<<t->lchild->rchild->data<<

23、endl;q.push(t->lchild->rchild);/B1q.push(t->lchild);/T t=q.top();/T if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data); elsecout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl;i=i+1;q.push(t);matchnt(t->data);/Bif

24、(pare(B1)=0)t=q.top();q.pop();if(pare("11")=0)/t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="11"/+t->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lchild->rchild->rchild=NULL;

25、t->lchild->rchild->data=T;t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->data=B1;cout<<t->lchild->data<<" "<<t->l

26、child->rchild->data<<" "<<t->lchild->rchild->rchild->data<<endl;q.push(t->lchild->rchild->rchild);/B1q.push(t->lchild->rchild);/Tq.push(t->lchild);/+ t=q.top();/+ if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data)

27、; elseif(pare("12")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="12"/-t->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild-&

28、gt;data=T;t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->data=B1;cout<<t->lchild->data<<" "<<t->lchild->rchild->data

29、<<" "<<t->lchild->rchild->rchild->data<<endl;q.push(t->lchild->rchild->rchild);/B1q.push(t->lchild->rchild);/Tq.push(t->lchild);/- t=q.top();/+ if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data);elseif(pare("

30、8")=0|pare("9")=0|pare("23")=0|pare("20")=0)/ ),# t->lchild=new Bitnode; t->lchild->data=""t->rchild=NULL; t->lchild->lchild=NULL; t->lchild->rchild=NULL;cout<<t->lchild->data<<endl; t=q.top(); i

31、f(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data); elsematchnt(t->data); else cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl; i=i+1; q.push(t); matchnt(t->data);/B1if(pare(T)=0)t=q.top();q.pop();if(pare("17")=0|pare(

32、"16")=0|pare("12")=0|pare("7")=0|pare("0")=0|pare("1")=0|pare("2")=0|pare("3")=0|pare("4")=0|pare("5")=0|pare("6")=0)t->lchild=new Bitnode;t-&g

33、t;lchild->rchild=NULL;t->lchild->lchild=NULL;t->lchild->data=F;t->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild->data=T1;cout<<t->lchild->data<<" "<<t->lc

34、hild->rchild->data<<endl;q.push(t->lchild->rchild);/T1q.push(t->lchild);/F t=q.top();/F if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data); elsecout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl;i=i+1;q.

35、push(t);matchnt(t->data);/Tif(pare(T1)=0)t=q.top();q.pop();if(pare("13")=0)/t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="13"/*t->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lc

36、hild->rchild->rchild=NULL;t->lchild->rchild->data=F;t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->data=T1;cout<<t->lchild->data<

37、<" "<<t->lchild->rchild->data<<" "<<t->lchild->rchild->rchild->data<<endl;q.push(t->lchild->rchild->rchild);q.push(t->lchild->rchild);q.push(t->lchild); t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);

38、elsematchnt(t->data); elseif(pare("14")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="14"/ "/"t->lchild->rchild=new Bitnode;t->lchild->rchild->rchild=NULL;t->lchild->rchild->l

39、child=NULL;t->lchild->rchild->data=F;t->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->data=T1;cout<<t->lchild->data<<" "<

40、<t->lchild->rchild->data<<" "<<t->lchild->rchild->rchild->data<<endl;q.push(t->lchild->rchild->rchild);q.push(t->lchild->rchild);q.push(t->lchild); t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->dat

41、a);elseif(pare("11")=0|pare("12")=0|pare("8")=0|pare("9")=0|pare("23")=0|pare("20")=0)/ ,# t->lchild=new Bitnode; t->lchild->data=""t->rchild=NULL; t->lchild->lchild=NULL; t-&g

42、t;lchild->rchild=NULL;cout<<t->lchild->data<<endl; t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data); elsematchnt(t->data); else cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法"<<endl; i=i+1; q.push(t); matchnt(t->

43、;data);/T1if(pare(F)=0)t=q.top();q.pop();if(pare("17")=0|pare("16")=0|pare("12")=0|pare("7")=0)t->lchild=new Bitnode;t->lchild->rchild=NULL;t->lchild->lchild =NULL;t->lchild->data=E;t->lchild->rchild=new Bitno

44、de;t->lchild->rchild->lchild =NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild->data=L;cout<<t->lchild->data<<" "<<t->lchild->rchild->data<<endl;q.push(t->lchild->rchild);q.push(t->lchild); t=q.top(); if(checkt

45、(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data); elseif(pare("0")=0|pare("1")=0|pare("2")=0|pare("3")=0|pare("5")=0|pare("6")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->

46、;lchild->rchild=NULL;if(pare("0")=0) t->lchild->data="0"/sinif(pare("1")=0) t->lchild->data="1"/cosif(pare("2")=0) t->lchild->data="2"/tgif(pare("3")=0) t->lchild->data="3&qu

47、ot;/ctgif(pare("5")=0) t->lchild->data="5"/lgif(pare("6")=0) t->lchild->data="6"/lnt->lchild->rchild=new Bitnode;t->lchild->rchild->lchild=NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild->data=E;co

48、ut<<t->lchild->data<<" "<<t->lchild->rchild->data<<endl;q.push(t->lchild->rchild);q.push(t->lchild); t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data);else if(pare("4")=0)t->lchild=new Bit

49、node;t->lchild->lchild=NULL;t->lchild->rchild=NULL; t->lchild->data="4"/logt->lchild->rchild=new Bitnode;t->lchild->rchild->rchild=NULL;t->lchild->rchild->lchild =NULL; t->lchild->rchild->data=N; cout<<t->lchild->data<<&q

50、uot; "<<t->lchild->rchild->data<<endl; q.push(t->lchild->rchild); q.push(t->lchild); t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data); else matchnt(t->data); else cout<<"第"<<i<<"個(gè)字符即"<<ai<<"不合法&q

51、uot;<<endl; i=i+1; q.push(t); matchnt(t->data);/Fif(pare(L)=0)t=q.top();q.pop();if(pare("19")=0)/t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="19"/t->lchild->rchild=new Bitnode;t->lchild->rchil

52、d->lchild=NULL;t->lchild->rchild->rchild=NULL;t->lchild->rchild->data=E;cout<<t->lchild->data<<" "<<t->lchild->rchild->data<<endl;q.push(t->lchild->rchild);q.push(t->lchild); t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matc

53、ht(t->data);elsematchnt(t->data); elseif(pare("11")=0|pare("12")=0|pare("8")=0|pare("13")=0|pare("14")=0|pare("9")=0|pare("23")=0)/ ,# t->lchild=new Bitnode; t->lchild->data

54、=""t->rchild=NULL; t->lchild->lchild=NULL; t->lchild->rchild=NULL;cout<<t->lchild->data<<endl; t=q.top(); if(checkt(t->data)/如果棧頂為終結(jié)符 matcht(t->data); elsematchnt(t->data); else cout<<"第"<<i<<"個(gè)字符即"<<ai&l

55、t;<"不合法"<<endl; i=i+1; q.push(t); matchnt(t->data); /Lif(pare(N)=0)t=q.top();q.pop();if(pare("17")=0|pare("16")=0|pare("12")=0|pare("0")=0|pare("1")=0|pare("2")=0|pare("3&

56、quot;)=0|pare("4")=0|pare("5")=0|pare("6")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data=B;cout<<t->lchild->data<<endl;q.push(t->lchild); t=q.top(); if(checkt(t->data)

57、/如果棧頂為終結(jié)符 matcht(t->data);elsematchnt(t->data); else if(pare("7")=0)t->lchild=new Bitnode;t->lchild->lchild=NULL;t->lchild->rchild=NULL;t->lchild->data="7"/(t->lchild->rchild=new Bitnode;t->lchild->rchild->rchild=NULL;t->lchild-&

58、gt;rchild->lchild =NULL;t->lchild->rchild->data=B;/Bt->lchild->rchild->rchild=new Bitnode;t->lchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->data="20"/,t->lchild->rchild->

59、;rchild->rchild=new Bitnode;t->lchild->rchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->rchild->data=B;/Bt->lchild->rchild->rchild->rchild->rchild=new Bitnode;t->lchild->

60、rchild->rchild->rchild->rchild->lchild=NULL;t->lchild->rchild->rchild->rchild->rchild->rchild=NULL;t->lchild->rchild->rchild->rchild->rchild->data="8"/)cout<<t->lchild->data<<" "<<t->lchild->rchild->data<<" "<<t->lchild->rchild->rchild->data<<" "<<t->lchild->rchild->rchild->rchild->data<<" "<<t->lchild->rchild->rchild->rchild

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論