語法分析報告_第1頁
語法分析報告_第2頁
語法分析報告_第3頁
語法分析報告_第4頁
語法分析報告_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、棵語法樹。六、當(dāng)輸入存在語法錯誤時,需給出語法錯誤的提示,指出語法錯誤發(fā)生的位置和錯誤類型。注:實驗前,修改了詞法分析,使其生成的記號流輸出到一個文本文件a.txt中,本實驗是從a.txt中讀取記號流對其進行語法分析2.1 上下文無關(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注:本文法的?前面是一些賦值語句(如:a=x+y;) ?后面是一個算術(shù)表達式(如a+b

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

6、ng data)判斷一個符號是否為終結(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<<"個字符即"<<ai<<"不合法"<<endl;

7、i+;/跳過錯誤break; /while if(pare(ai)=0&&checkt(t1)/t1=23cout<<t1<<"匹配"<<endl;elseif(checkt(t1)cout<<"第"<<i<<"個字符即"<<ai<<"不合法"<<endl;i+;/跳過錯誤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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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<<"個字符即"<<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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論