計算機理論導引實驗報告CFG是P成員_第1頁
計算機理論導引實驗報告CFG是P成員_第2頁
計算機理論導引實驗報告CFG是P成員_第3頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、HUNAN_I 1 _jUNIVERSIT YJff 0、, JTTT耳V計算理論導引實驗報告fZ < fir -T- H riL Fl L X題 目:CFG是P成員學生姓名:安佳瑋學生 學號:20090810101專業(yè)班級:計算機科學與技術 1班上課老師:吳昊實驗日期:2011-12-22、實驗目的、實驗方法三、實驗代碼目錄錯.誤!未定義書簽錯.誤!未定義書簽四、測試數(shù)據(jù)以及運行結(jié)果 10一、實驗目的上下文無關文法CFG G是否派生某個串 W。采用動態(tài)規(guī)劃(Dynamic Programming)設計 個多項式時間的驗證算法二、試驗方法編寫一個算法/程序,對于給定的輸入<G, w

2、可以在多項式時間內(nèi)判定 Acfg。三、實驗代碼 include <iostream.h>/ 第一類規(guī)則,即規(guī)則右邊只含有兩個變元class Regular_1public :int left ;int right_1;int right_2;/ 第二類規(guī)則,即規(guī)則右邊只含有一個終結(jié)符或者空class Regular_2public:int left;int right ;;/ 表格類 ,用來存放中間數(shù)據(jù)class Tablepublic:int size;/ 表格的行和列的數(shù)量 ,與輸入長度相同int num_v ;/ 表格中每個單元格最多含有的數(shù)量大小,與 cfg 的變元數(shù)量相同

3、int value; / 用來存放數(shù)據(jù)的三元數(shù)組Table(int num_v,int num_w);/ 構造函數(shù),參數(shù)指定輸入字符串的長度以及 cfg 變元的數(shù)量Table();/析構函數(shù)void SetValue(int i,int j,int num );/ 向表格第 i 行 j 列追加數(shù)據(jù) numbool CheckValue (int i,int j,int num) ; /檢查表格第i行j列是否含有數(shù)據(jù) num,含有則返回true,否 則返回 falsevoid Print ( );/ 打印表格的內(nèi)容;Table: Table()if(value) delete value;voi

4、d Table:SetValue ( int i,int j,int num)int *p=value i j;/ 尋找追加數(shù)據(jù)的位置while( (*p)!= 1)p+; p=num ;bool Table: :CheckValue(int i , int j,int num)int *p=valuei j ;while ( *p)!= 1)if ( (*p)=num)return true ;p+;return false;Table: :Table( int num_v,int num_w)size=num_w;this >num_v=num_v ; value=new int n

5、um_w ;/ 給 value 動態(tài)分配,并將初值設為 1 for(int i=0 ;i num_w;i+ )valuei =new int*num_w ; for ( int j=0 ; j<num_w ;j+) value i j=new int num_v;for(int k=0 ; k<num_v ;k+ ) valuei j k= 1;void Table : :Print ()int i , j,k ;cout " - - - -打印表格內(nèi)容 - - - - - "< endl; if ( size=0)cout” 表格為空” <endl

6、;return;cout”表格內(nèi)容如下:"<endl;for(i=0; i<size; i+)for(j=0 ; j<size; j+)cout<” table ” i << ” ” <j< < " : ”;for(k=0;k num_v ; k+)if(this>valuei jk=1) break;elsecout< this-valueij k< "”;cout< endl;class CFGpublic :int num_v;int num_e;Regular_1 r1; Reg

7、ular_2* r2; int start_v;bool Go ( int w )CFG();CFG();CFG::CFG() cout<<endl<< ” - - - -CFG 構造函數(shù) - - -” <<endl ; int num_r1 , num_r2;int i , j,k;cout<< ” - - - - - - " <endl ”變元總數(shù): ” ; cin>>num_v;cout< "終結(jié)符總數(shù): cin>>num_e ;cout<< ” - cin> num

8、_r1 ;-" endl<< ”第一類規(guī)則總數(shù)(規(guī)則右邊為變元)";r1=new Regular_1num_r1+1;0 開始 "< endl ;(以空格隔開)cout"- - - - - "<<endl ; cout <”在下面的輸入中注意:變元編號以及終結(jié)符編號從cout<<" - - - -" <endl;for( i=0;i<num_r1;i+ ) cout<< ”第”<i<”條規(guī)則的三個變元的編號依次為cin > >r1

9、 i。left> r1 i .right_1 > >r1 i。right_2;r1i 。 left=-1;cout<” - - - - - - "<<endl< ”第二類規(guī)則總數(shù) (規(guī)則右邊為終結(jié)符或空) :"cin>>num_r2;r2=new Regular_2num_r2+1 ;for(i=0;i num_r2;i+)cout”第”<i<”條規(guī)則的變元的編號和終結(jié)符編號(空以一1表示)依次為(以空格隔開):”;cin> > r2i 。 left>>r2i.right ;r2i。

10、left=-1;cout<"-” < endl<” 起始變元的編號為:"cin>> start_v ;CFG :CFG()if(r1 ) delete r1;if(r2)delete r2;bool CFG : :Go(int w)bool result=false ;Regular_1 *p1=r1 ;Regular_2 *p2=r2;int len_w=0;int p=w;/ 獲取輸入長度while ( p!= 1)len_w+ ; p+;p=w;Table t(num_v,len_w );int i ,j,k,l ;cout "

11、- - - 開始運行 - - - -” endl;if(w 0 =1)cout< ”- - - - - - - - -”< endl;cout"檢查發(fā)現(xiàn)輸入為空."< <endl;while( p2)。 left!=-1 )if(玄 p2)。left=start_v && (*p2).right=-1)cout <<”檢查到起始變元到空的規(guī)則."< < endl;cout<<" 運行完畢!結(jié)果為 :接受 !"< < endl;cout<<&quo

12、t;- - -” <<endl;result=true ; return result;p2+;cout <<"未發(fā)現(xiàn)從起始變元到空的派生?!?<<endl;cout< "運行完畢,結(jié)果為:拒絕” <endl;cout ”- - - - - -" endl;return false;p2=r2 ;i=0;cout”- - - - -"endl;cout"開始從頭到尾掃描,將某些變元放入對應的對角線上的表格中:” endl;while ( p!= 1)while (*p2)。left! = 1)if

13、 (*p2) 。 right= p)cout ”由于變元” (*p2)eft ”派生” ”終結(jié)符” * p”,故將其放入表格 的"i"行"i” 列” endl;t。 SetValue( i,i,(* p2) .left) ;p2+;p2=r2;p+;i+;p=w;cout" - - - - - -” endl;cout "開始依次向表格的某些單元格添加數(shù)據(jù).。 ."endl;for( l=2;l=len_w ; l+)for(i=0;ilen_w l+1 ; i+)j=i+l-1 ;for(k=i;k=j-1;k+ )while (

14、(*p1).left!=-1 )if(t.CheckValue(i , k,(* p1) .right_1 ) &t。 CheckValue(k+1,j,(*p1 )。 right_2 ) )cout"table(”i","k ” )中含有變元” (* p1) .right_1 ”而 且 table(” k+1"," j” )中含有”(* p1).right_2;cout",因此將變元”(* p1)eft” 放入 table (" i ",”j")中"endl ;t.SetValue(i

15、, j, (*p1)。 left);p1+;p1=r1;t.Print( ) ;if(t.CheckValue (1, len_w1,start_v)cout<< ”起始變元 "< start_v "在 talbe(0,” <len_w 1” )中" endl; cout<”運行完畢!結(jié)果為:接受! " endl;cout < " - - - - - -”<endl;return true;elsecout<"起始變元” start_v<< ” 在不在 talbe(0,&qu

16、ot;<len_w-1<")中” <<endl; cout”運行完畢!結(jié)果為:拒絕! "endl;cout " - - - - "< endl;return false;main ( )cout< ” 一 - CFG 是 P 成員判定程序 一-” <<endl;CFG c;while ( true)int w;int len_w;cout” - - - -"<<endl< ”輸入 w 的長度: "cin >len_w;w=new int len_w+1 ;if (

17、 len_w=0)cout<< ”- -"<endl;elsecout<< ”依次輸入w的內(nèi)容的編號(以空格隔開):";for ( int i=0;i len_w; i+)cin>wi ;wi=1; c 。 Go(w);cout<”驗證其它字符串?( Y/N )" char c;cin >c; if(c= ') N' return; 改程序在 VC+ 下可以通過編譯,并且運行結(jié)果正確四、測試數(shù)據(jù)以及運行結(jié)果以教材習題上面的一個 CFG 為例.該 CFG 描述如下:S RTR-> TR | aT

18、> TR | b 在該 CFG 下面測試輸入 w1=baba 和 w2=ababb 測試結(jié)果如下:氷"取I文檔、計算理論導引實£SBDebu£CFG_P_ »e|CFG是P成員判定程序貽變元的編號為曲氧秦規(guī)則的變元的編卑和緇一=三-CFCM Ip 區(qū)j 5v 第一類規(guī)則總數(shù)規(guī)則右邊為變元):3亠下面的輸入中注意:竇元編號以及g趙吉符編號從0開始IjW J觀牆1護觀韓隸瞳 規(guī)則的三個變元的蓊粵依次為(滋>:KJ 1 2 >s 1 2 1?; 2 2 1表示戈依次為瓷以空章隔開” 1 0 空以-丄表示依次為£以空梏寓開、;2 1編

19、行 -S -48 內(nèi)開一-磋列列列列 fi B i 2 3 對遼仃 勺 0 12 3 為的®K:打 孜入X-A-JA 4SPWW 備GilSJ 49,士口仕口 士口士刁 時終終終終 -,二-,三.二二一 到、2/1Z2-1- 頭元元元元 從$-s-$-$- 始于于于于 幵由由由由始依次向養(yǎng)某些單元格添加數(shù)據(jù) 變匹2而且EbXCUl able<0.6> #含有變兀2而 且 able<l,l>U<ijfn 且七話仍tflble<2,2>口含有變元2 而且le<3,3>able<2,2含有變怎2麗且七血"U.S able

20、Cl>l> 口吾肴芟兀1麗且燉鮎ble<0,l>含肴變元而且七話1M2詔、 tfith"緬含有變怎2而且able<0,l>中含肩變兀J市1且七"1eU”3 -打印表格內(nèi)容甘&內(nèi)容如下二bieEairai:2 ablelBHl :12含含含含含含含含含含 口口口 口口口 口口口口 一AjlbJ hr.-l 1 hLbj ¥r.-Br.1 dd業(yè)止止Nd業(yè)上止 因因因B因因因因KE2 1/1201230312 元元元元元元一兀元元元 mu1沖nn2>C33>3口3沖3>t4日-Hxf < "

21、恥l文檔l計算理論導引實SBBebu£CFG_P_ exe起始變元的編號為內(nèi)囂也集號以邱轡開)m日只口.5仃rl>,3>入table<0 入tahle<l Stable <2.At ableAt ablc<l 入t £thle<0 Stable <0 Avtiljle <012012 0 00 12 元元元元元元元元元元 度嘍變嘍變變變變 r.-a X "I:r.-lr.Jr.l ” Jr.Jr.-lr.gJ冃園因囚It園園囚囚K莊列列列列 疳812 3 對往遼ut 勺 0 12 3 乜表奠表 說入?yún)踩肴雮?,

22、1,0, 卜L士口土 口士口士口 44甲Kt 咚- 3J終終終終 Et生生生生 5 2 12 1 頭元元元元 從*->-1- 始于于于于 開由由由由含含含含> > >3 2 3 F "3 2 2 c c- Cece1 1 1 b b baaa七t t且且旦且旦且且旦且旦內(nèi) 一而和而而mIETO而而麗格2 21221112 一元元元元元元元元元一假 ln$n 甜有有有有有有有有有 合含合仲合含合含削 養(yǎng)口口口口口口口口口口 一 一>1 _一.> _一3 一2 -e1 - b -ta容> > 2 1 乂 2 0 cc e e 1= 1 b

23、b a me-1 - ba _ableaJ0J:2 able0Jl:l 2 abler012:0UbleEOHJ ;012table 11 BlsAble LI 1 Cl 1 =able Lil 2:able 111 3:able 2 1 Cl 1 : table 2C2;2able213 :12ablc3101able 3 1 1 abls 13JL31 :1超始變元0在talbe<0,3>中 醫(yī)行螫I苦乜.接貿(mào) 辰證衣它字符軌CM) y氏恥I文檔I計算理論導引實SBBebu£CFG_P_ exe魏聽密隔開)舒0,1,0,1,1, 申號+4田幺一扌一£一4 并冬冬冬挙冬 m £ - Z2 - ZE ZZ * 豐 jp'H lfa_,一二.=一 J1-1-! 1 V- 2 頭元元元一兀元 從變變變變變 始于于于于于 開由由由由由菇列列列列列 俘01 234 對一Htlw遼仃S0 1 2 3- 4hB'亠“表表表表表 枚A-入入人人 一故故故故故>* *> u 1 0 1 1 .nW始依次向養(yǎng)ableE 丁口ableCl,l> 含有變元 2 而且 tableC2.2) AbleC2,2>ljfiS

溫馨提示

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

評論

0/150

提交評論