




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度租船運輸費用及船舶交易中介服務(wù)協(xié)議
- 2025年度知識產(chǎn)權(quán)授權(quán)保證金協(xié)議
- 2025年度私家車個人車輛抵押融資合同
- 二零二五年度勞務(wù)班組退場及新能源項目設(shè)備回收協(xié)議
- 二零二五年度機床轉(zhuǎn)讓與知識產(chǎn)權(quán)保護協(xié)議
- 2025年度生物科技企業(yè)研發(fā)人員勞動用工協(xié)議書
- 二零二五年度手房貸款買賣合同(含裝修款分期支付)
- 二零二五年度古井買賣合同范本全新解讀
- 二零二五年度科室承包責(zé)任書及考核協(xié)議
- 幼兒園與社區(qū)聯(lián)合舉辦親子活動的合作協(xié)議
- 高三二輪復(fù)習(xí)備考指導(dǎo)意見
- 港口散裝液體危險化學(xué)品港口經(jīng)營人的裝卸管理人員從業(yè)資格考試
- 2023年四川省公務(wù)員考試行測真題及答案解析
- 日本商務(wù)禮儀課件
- 中國民間傳說:田螺姑娘
- 淺談鋼琴即興伴奏在教學(xué)中應(yīng)用現(xiàn)狀及提高方法 論文
- 身體功能訓(xùn)練
- 部編人教版四年級語文下冊《全冊全套》課件ppt
- 英文版-你來比劃我來猜游戲
- 皖2015s209 混凝土砌塊式排水檢查井
- 五年級道德與法治下冊 (我參與我奉獻)新課件
評論
0/150
提交評論