




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、河南工業大學實驗報告課 程 編譯原理 實驗名稱 實驗二 LL(1)分析法 實驗目的1掌握LL(1)分析法的基本原理; 2掌握LL(1)分析表的構造方法; 3掌握LL(1)驅動程序的構造方法。一. 實驗內容及要求根據某一文法編制調試LL(1)分析程序,以便對任意輸入的符號串進行分析。本次實驗的目的主要是加深對預測分析LL(1)分析法的理解。 對下列文法,用LL(1)分析法對任意輸入的符號串進行分析:(1)E->TG(2)G->+TG(3)G->(4)T->FS(5)S->*FS(6)S->(7)F->(E)(8)F->i程序輸入一以#結束的符號串(
2、包括+*()i#),如:i+i*i#。輸出過程如下:步驟分析棧剩余輸入串所用產生式1Ei+i*i#E->TG.二. 實驗過程及結果代碼如下:#include<iostream>#include "edge.h"using namespace std;edge:edge()cin>>left>>right;rlen=right.length();if(NODE.find(left)>NODE.length() NODE+=left;string edge:getlf()return left;string edge:getrg(
3、)return right;string edge:getfirst()return first;string edge:getfollow()return follow;string edge:getselect()return select;string edge:getro()string str;str+=right0;return str;int edge:getrlen()return right.length();void edge:newfirst(string w)int i;for(i=0;i<w.length();i+)if(first.find(wi)>fi
4、rst.length()first+=wi;void edge:newfollow(string w)int i;for(i=0;i<w.length();i+)if(follow.find(wi)>follow.length()&&wi!='')follow+=wi;void edge:newselect(string w)int i;for(i=0;i<w.length();i+) if(select.find(wi)>select.length()&&wi!='')select+=wi;void ed
5、ge:delfirst()int i=first.find('');first.erase(i,1);int SUM;string NODE,ENODE;/計算firstvoid first(edge ni,edge *n,int x)int i,j;for(j=0;j<SUM;j+)if(ni.getlf()=nj.getlf()if(NODE.find(nj.getro()<NODE.length() for(i=0;i<SUM;i+) if(ni.getlf()=nj.getro() first(ni,n,x);else nx.newfirst(nj.g
6、etro();/計算followvoid follow(edge ni,edge *n,int x)int i,j,k,s;string str;for(i=0;i<ni.getrlen();i+)s=NODE.find(ni.getrg()i);if(s<NODE.length()&&s>-1) /是非終結符if(i<ni.getrlen()-1) /不在最右for(j=0;j<SUM;j+)if(nj.getlf().find(ni.getrg()i)=0)if(NODE.find(ni.getrg()i+1)<NODE.length()
7、for(k=0;k<SUM;k+) if(nk.getlf().find(ni.getrg()i+1)=0) nj.newfollow(nk.getfirst(); if(nk.getfirst().find("")<nk.getfirst().length() nj.newfollow(ni.getfollow(); elsestr.erase();str+=ni.getrg()i+1;nj.newfollow(str);/計算selectvoid select(edge &ni,edge *n)int i,j;if(ENODE.find(ni.get
8、ro()<ENODE.length()ni.newselect(ni.getro();if(ni.getro()="")ni.newselect(ni.getfollow();elsefor(i=0;i<ni.getrlen();i+)for(j=0;j<SUM;j+)if(ni.getrg()i=nj.getlf()0)ni.newselect(nj.getfirst();if(nj.getfirst().find('')>nj.getfirst().length()return;/輸出集合void out(string p)int
9、 i;if(p.length()=0) return;cout<<""for(i=0;i<p.length()-1;i+) cout<<pi<<","cout<<pi<<""/連續輸出符號void outfu(int a,string c)int i;for(i=0;i<a;i+)cout<<c;/輸出預測分析表void outgraph(edge *n,string (*yc)50)int i,j,k;bool flag;for(i=0;i<E
10、NODE.length();i+) if(ENODEi!='') outfu(10," ");cout<<ENODEi; outfu(10," ");cout<<"#"<<endl;int x;for(i=0;i<NODE.length();i+)outfu(4," ");cout<<NODEi;outfu(5," ");for(k=0;k<ENODE.length();k+)flag=1;for(j=0;j<SU
11、M;j+) if(NODEi=nj.getlf()0) x=nj.getselect().find(ENODEk); if(x<nj.getselect().length()&&x>-1) cout<<"->"<<nj.getrg(); ycik=nj.getrg(); outfu(9-nj.getrlen()," "); flag=0; x=nj.getselect().find('#'); if(k=ENODE.length()-1&&x<nj.getse
12、lect().length()&&x>-1) cout<<"->"<<nj.getrg(); ycij=nj.getrg(); if(flag&&ENODEk!='') outfu(11," ");cout<<endl;/分析符號串int pipei(string &chuan,string &fenxi,string (*yc)50,int &b)char ch,a;int x,i,j,k;b+;cout<<endl<
13、;<" "<<b;if(b>9) outfu(8," ");else outfu(9," ");cout<<fenxi;outfu(26-chuan.length()-fenxi.length()," ");cout<<chuan;outfu(10," ");a=chuan0;ch=fenxifenxi.length()-1;x=ENODE.find(ch);if(x<ENODE.length()&&x>-1) if(c
14、h=a) fenxi.erase(fenxi.length()-1,1);chuan.erase(0,1);cout<<"'"<<a<<"'匹配"if(pipei(chuan,fenxi,yc,b) return 1;else return 0; elsereturn 0;else if(ch='#') if(ch=a) cout<<"分析成功"<<endl; return 1;elsereturn 0; elseif(ch=''
15、;) fenxi.erase(fenxi.length()-1,1); if(pipei(chuan,fenxi,yc,b) return 1; else return 0;else i=NODE.find(ch); if(a='#') x=ENODE.find(''); if(x<ENODE.length()&&x>-1) j=ENODE.length()-1; else j=ENODE.length(); elsej=ENODE.find(a); if(ycij.length() cout<<NODEi<<
16、"->"<<ycij; fenxi.erase(fenxi.length()-1,1); for(k=ycij.length()-1;k>-1;k-) if(ycijk!='')fenxi+=ycijk; if(pipei(chuan,fenxi,yc,b) return 1; else return 0; elsereturn 0;void main()edge *n;string str,(*yc)50;int i,j,k;bool flag=0;cout<<"請輸入上下文無關文法的總規則數:"&l
17、t;<endl;cin>>SUM;cout<<"請輸入具體規則(格式:左部 右部,為空):"<<endl;n=new edgeSUM;for(i=0;i<SUM;i+) for(j=0;j<ni.getrlen();j+) str=ni.getrg();if(NODE.find(strj)>NODE.length()&&ENODE.find(strj)>ENODE.length()ENODE+=strj; /計算first集合for(i=0;i<SUM;i+) first(ni,n,i)
18、;/outfu(10,"*");cout<<endl;for(i=0;i<SUM;i+) if(ni.getfirst().find("")<ni.getfirst().length() if(NODE.find(ni.getro()<NODE.length() for(k=1;k<ni.getrlen();k+) if(NODE.find(ni.getrg()k)<NODE.length() for(j=0;j<SUM;j+) if(ni.getrg()k=nj.getlf()0) ni.newfirst
19、(nj.getfirst(); break; if(nj.getfirst().find("")>nj.getfirst().length() ni.delfirst();break; /計算follow集合for(k=0;k<SUM;k+) for(i=0;i<SUM;i+) if(ni.getlf()=n0.getlf() ni.newfollow("#");follow(ni,n,i); for(i=0;i<SUM;i+) for(j=0;j<SUM;j+) if(nj.getrg().find(ni.getlf()=
20、nj.getrlen()-1) ni.newfollow(nj.getfollow(); /計算select集合for(i=0;i<SUM;i+) select(ni,n);for(i=0;i<NODE.length();i+) str.erase(); for(j=0;j<SUM;j+)if(nj.getlf()0=NODEi)if(!str.length()str=nj.getselect();elsefor(k=0;k<nj.getselect().length();k+)if(str.find(nj.getselect()k)<str.length()fl
21、ag=1;break;/輸出cout<<endl<<"非終結符"outfu(SUM," ");cout<<"First"outfu(SUM," ");cout<<"Follow"<<endl;outfu(5+SUM,"-*-");cout<<endl;for(i=0;i<NODE.length();i+) for(j=0;j<SUM;j+)if(NODEi=nj.getlf()0) outfu
22、(3," "); cout<<NODEi; outfu(SUM+4," "); out(nj.getfirst(); outfu(SUM+4-2*nj.getfirst().length()," "); out(nj.getfollow(); cout<<endl; break;outfu(5+SUM,"-*-");cout<<endl<<"判定結論: "if(flag) cout<<"該文法不是LL(1)文法!"&
23、lt;<endl; return;else cout<<"該文法是LL(1)文法!"<<endl;/輸出預測分析表cout<<endl<<"預測分析表如下:"<<endl;yc=new stringNODE.length()50;outgraph(n,yc);string chuan,fenxi,fchuan;cout<<endl<<"請輸入符號串:"cin>>chuan;fchuan=chuan;fenxi="#"
24、;fenxi+=NODE0;i=0;cout<<endl<<"預測分析過程如下:"<<endl;cout<<"步驟"outfu(7," ");cout<<"分析棧"outfu(10," ");cout<<"剩余輸入串"outfu(8," ");cout<<"推導所用產生式或匹配"if(pipei(chuan,fenxi,yc,i) cout<<
25、;endl<<"輸入串"<<fchuan<<"是該文法的句子!"<<endl;else cout<<endl<<"輸入串"<<fchuan<<"不是該文法的句子!"<<endl;截屏如下:三. 實驗中的問題及心得這次實驗讓我更加熟悉了LL(1)的工作流程以及LL(1)分析表的構造方法。以前課堂上搞不懂的算法流程通過實驗都能得到進一步的了解。七年級英語期末考試質量分析一、試卷分析:本次試卷的難易程度定位在面向大
26、多數學生。該份試卷緊扣教材,突出重點,注重對基礎知識和基本技能的考查。二、題型分析:1單項選擇單項選擇題共15道小題,知識覆蓋面較廣,重點、難點和疑點比較突出,注重能力考查。考查以動詞為主,兼顧其它詞類,并考查句法和語言點。考查的方式突出了語境。2完形填空文章對學生的語言理解能力和綜合運用能力提出了較高的要求,重點突出了對單復數和語言點的考查。3閱讀理解本大題包括五篇文章,安排較合理,難度適中,既有日常生活的題材,又有表格圖片解說,符合新課程的要求,體現新課程的理念。根據新課程標準五級有關讀的目標描述,問題符合“能找出文章中的主題,理解故事的情節”等目標描述。閱讀體現新課標所倡導的任務型教學的
27、理念。通過閱讀短文,主要考查學生根據所獲取的信息解決實際問題的能力。閱讀的難度不很大,完成任務的環節也比較簡潔。4書面表達書面表達中仿寫與課本內容有著極大的相似之處,是對教材的深加工,做到了學以致用。創新寫作緊扣課程標準要求,結合課程標準有關寫的目標描述,考查了學生綜合應用語言的能力。三、典型錯誤分析第一大題單項填空中,錯誤率較高。主要問題是對單詞沒理解透,平時講過的語法沒記住,不能靈活應用。交際運用失分較多,主要是課文掌握不到位。書面表達中考生的主要錯誤有:1)在完成句子時不尊重原句的中文意思,改變了句意;2)不會用英語思考,用英語表達的能力較差;3)思路不清晰。4)語言的基本功不扎實,病句
28、較多;(5)書寫習慣不好,卷面不整潔。書面表達部分中常見錯誤形式:1時態錯誤。a.時態混淆 b.時態前后不一致 c. 主謂不一致2. 句子結構錯誤。3單詞錯誤 如:make寫成mate等。四、問題及對策(一)主要問題1、學校兩極分化明顯。因此如何有效地抑制兩極分化,對學有困難的學生的轉化提高,大面積提高英語教學質量,對大多數學校來說,任務依然艱巨。2、基礎知識和基本技能不扎實,學生對一些基本詞匯、語法、句型的掌握不夠熟練,也就談不上運用了。因此,課堂教學中如何注重基礎知識和基本技能的合理、有效地訓練,應引起教師的高度重視。3、學生綜合運用語言的能力不強,試卷中有許多試題要求學生在一定的語境中靈活運用知識獨立解決。但考查的結果卻暴露教學中的一個薄弱環節。因此,在平時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微生物實驗室的質量管理試題及答案
- 注會備考過程中的自我激勵與反思方法試題及答案
- 項目討論與評審的有效方式題目及答案
- 注冊會計師考試學習過程中的信息獲取與共享技巧試題及答案
- 項目管理中的時間管理策略試題及答案
- 2024年項目管理資格證備考試題及答案
- 遇見2025年注冊會計師考試的全新挑戰試題及答案
- 費托蠟行業發展動態與市場前景展望
- 低空經濟推動應急救援體系創新升級
- 項目管理考試學習反饋與復盤的重要性分析試題及答案
- 裝修工藝流程施工標準
- 網評員培訓課件
- 哪吒主題課件模板文檔
- 《四時用藥例》教案-【中職專用】高二語文同步教學(高教版2023·拓展模塊下冊)
- 2025年寧波職業技術學院單招職業傾向性測試題庫及答案(歷年真題)
- 《基于PLC的交通信號燈控制系統的設計》5400字【論文】
- 2025年亞馬遜FBA物流合同-全球配送網絡合作協議
- 2024年河南南陽師范學院開招聘筆試真題
- 高中數學復習 導數壓軸大題歸類 (原卷版)
- 手術部位標識國家標準(2023版)
- 數字政府建設發展研究報告(2024年)
評論
0/150
提交評論