下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、HUNAN_I 1 _jUNIVERSIT YJff 0、, JTTT耳V计算理论导引实验报告fZ < fir -T- H riL Fl L X题 目:CFG是P成员学生姓名:安佳玮学生 学号:20090810101专业班级:计算机科学与技术 1班上课老师:吴昊实验日期:2011-12-22、实验目的、实验方法三、实验代码目录错.误!未定义书签错.误!未定义书签四、测试数据以及运行结果 10一、实验目的上下文无关文法CFG G是否派生某个串 W。采用动态规划(Dynamic Programming)设计 个多项式时间的验证算法二、试验方法编写一个算法/程序,对于给定的输入<G, w
2、可以在多项式时间内判定 Acfg。三、实验代码 include <iostream.h>/ 第一类规则,即规则右边只含有两个变元class Regular_1public :int left ;int right_1;int right_2;/ 第二类规则,即规则右边只含有一个终结符或者空class Regular_2public:int left;int right ;;/ 表格类 ,用来存放中间数据class Tablepublic:int size;/ 表格的行和列的数量 ,与输入长度相同int num_v ;/ 表格中每个单元格最多含有的数量大小,与 cfg 的变元数量相同
3、int value; / 用来存放数据的三元数组Table(int num_v,int num_w);/ 构造函数,参数指定输入字符串的长度以及 cfg 变元的数量Table();/析构函数void SetValue(int i,int j,int num );/ 向表格第 i 行 j 列追加数据 numbool CheckValue (int i,int j,int num) ; /检查表格第i行j列是否含有数据 num,含有则返回true,否 则返回 falsevoid Print ( );/ 打印表格的内容;Table: Table()if(value) delete value;voi
4、d Table:SetValue ( int i,int j,int num)int *p=value i 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 动态分配,并将初值设为 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 " - - - -打印表格内容 - - - - - "< endl; if ( size=0)cout” 表格为空” <endl
6、;return;cout”表格内容如下:"<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 构造函数 - - -” <<endl ; int num_r1 , num_r2;int i , j,k;cout<< ” - - - - - - " <endl ”变元总数: ” ; cin>>num_v;cout< "终结符总数: cin>>num_e ;cout<< ” - cin> num
8、_r1 ;-" endl<< ”第一类规则总数(规则右边为变元)";r1=new Regular_1num_r1+1;0 开始 "< endl ;(以空格隔开)cout"- - - - - "<<endl ; cout <”在下面的输入中注意:变元编号以及终结符编号从cout<<" - - - -" <endl;for( i=0;i<num_r1;i+ ) cout<< ”第”<i<”条规则的三个变元的编号依次为cin > >r1
9、 i。left> r1 i .right_1 > >r1 i。right_2;r1i 。 left=-1;cout<” - - - - - - "<<endl< ”第二类规则总数 (规则右边为终结符或空) :"cin>>num_r2;r2=new Regular_2num_r2+1 ;for(i=0;i num_r2;i+)cout”第”<i<”条规则的变元的编号和终结符编号(空以一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"检查发现输入为空."< <endl;while( p2)。 left!=-1 )if(玄 p2)。left=start_v && (*p2).right=-1)cout <<”检查到起始变元到空的规则."< < endl;cout<<" 运行完毕!结果为 :接受 !"< < endl;cout<<&quo
12、t;- - -” <<endl;result=true ; return result;p2+;cout <<"未发现从起始变元到空的派生。” <<endl;cout< "运行完毕,结果为:拒绝” <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 ”派生” ”终结符” * p”,故将其放入表格 的"i"行"i” 列” endl;t。 SetValue( i,i,(* p2) .left) ;p2+;p2=r2;p+;i+;p=w;cout" - - - - - -” endl;cout "开始依次向表格的某些单元格添加数据.。 ."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<”运行完毕!结果为:接受! " endl;cout < " - - - - - -”<endl;return true;elsecout<"起始变元” start_v<< ” 在不在 talbe(0,&qu
16、ot;<len_w-1<")中” <<endl; cout”运行完毕!结果为:拒绝! "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的内容的编号(以空格隔开):";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+ 下可以通过编译,并且运行结果正确四、测试数据以及运行结果以教材习题上面的一个 CFG 为例.该 CFG 描述如下:S RTR-> TR | aT
18、> TR | b 在该 CFG 下面测试输入 w1=baba 和 w2=ababb 测试结果如下:氷"取I文档、计算理论导引实£SBDebu£CFG_P_ »e|CFG是P成员判定程序貽变元的编号为曲氧秦规则的变元的编卑和缁一=三-CFCM Ip 區j 5v 第一类规则总数规则右边为变元):3亠下面的输入中注意:竇元编号以及g赵吉符编号从0开始IjW J觀牆1護觀韓隸瞳 规则的三个变元的蓊粵依次为(滋>:KJ 1 2 >s 1 2 1?; 2 2 1表示戈依次为瓷以空章隔开” 1 0 空以-丄表示依次为£以空梏寓开、;2 1编
19、行 -S -48 内开一-磋列列列列 fi B i 2 3 对辽仃 勺 0 12 3 为的®K:打 孜入X-A-JA 4SPWW 备GilSJ 49,士口仕口 士口士刁 时终终终终 -,二-,三.二二一 到、2/1Z2-1- 头元元元元 从$-s-$-$- 始于于于于 幵由由由由始依次向養某些单元格添加数据 变匹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 -打印表格内容甘&内容如下二bieEairai:2 ablelBHl :12含含含含含含含含含含 口口口 口口口 口口口口 一AjlbJ hr.-l 1 hLbj ¥r.-Br.1 dd业止止Nd业上止 因因因B因因因因KE2 1/1201230312 元元元元元元一兀元元元 mu1冲nn2>C33>3口3沖3>t4日-Hxf < "
21、恥l文档l计算理论导引实SBBebu£CFG_P_ exe起始变元的编号为内囂也集号以邱轡开)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 乜表奠表 说入丛入入备0,
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且且旦且旦且且旦且旦內 一而和而而mIETO而而丽格2 21221112 一元元元元元元元元元一假 ln$n 甜有有有有有有有有有 合含合仲合含合含削 養口口口口口口口口口口 一 一>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>中 医行螫I苦乜.接贸 辰证衣它字符軌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始依次向養ableE 丁口ableCl,l> 含有变元 2 而且 tableC2.2) AbleC2,2>ljfiS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSBM 0033-2023骨接合植入物 可降解镁骨钉
- T/UNP 334-2024废弃电器电子产品回收规范
- T/GSEE 12-2024配电房智能化电气设计规范
- T/CI 803-2024虚拟商品交付平台 充值数据接口
- T/CADERM 8006-2024医疗急救辅助员队伍建设与管理要求
- T/CSAE 315.2-2024合作式智能运输系统 应用层交互技术要求 第2部分:感知数据共享
- AI在意大利语中的应用
- 2025~2026学年甘肃省定西市岷县北师大版三年级上册阶段性学习效果评估数学试卷【附答案】
- 2026学年湖南省津市市三年级数学期末模考高频题(详细参考解析)详细答案和解析
- 2025-2026学年江西省南昌市初中数学八年级期末下册高分预测提优特训题(详细参考解析)
- 注册安全工程师考试(初级)试卷与参考答案(2026年)
- 今天你光盘了吗 - 世界粮食日主题课件
- 肩周炎中医护理
- 2026年《计算机组成原理》培训试卷(含答案)
- 急性胆囊炎诊疗专家共识(2026版)
- 2026中国生物医药产业发展动态及投资前景预测报告
- 6.2 民主政治不断发展 课件(内嵌视频)2026-2027学年统编版道德与法治九年级上册
- 高三数学一轮复习《数列求和》教学设计
- 患者十大安全目标2025版(新)
- 重大会议保障及应急处置工作指南
- 2026北方联合电力限责任公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
评论
0/150
提交评论