版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理实验报告题 目 表达式语法分析程序的构造学 院专 业班 级学 号 学生姓名指导教师西安思源学院教务处制实验四表达式语法分析程序的构造一、实验目的1掌握c+语言编译的语法分析程序2 分别掌握ll(1)、算符优先、lr等语法分析方法的构造。二、实验环境microsoft visual c+ 6. 0三、实验内容给定某一文法,试构造其简单优先矩阵(或1±(1)矩阵),并编制程序。 给出相应句子的语法分析过程,判其正确性。例如:给定文法g:e->t elel+te1 / et-ft1tlf *f / ef->id/ (e)(1) 先构造其select集合,判定其是否为ll
2、文法(2) 是则构造其分析表(3) 给出句子id+id*id$的语法分析过程四、设计说明ll(1):#include<stdio.h>#include<str i ng>typedef int datatype;char an3 = ,$t/e,);charcn4二r $:,才,+',才 fffj fchar*bn1n2 = / /f/z/ / /99“*(,)z,,e”xt ,/ / / /丁 /xt ,. x,t"xt+,”", 1ffz,t ,/ l"yf , tf l yf .,/ / y ,/ /f/ l ,yf* f/
3、/ / / / /fff/ / z ,/ / / /tf)e(:“;void fxb()int i, j;cout«/z分析表为:,«end i;for(i=0;i<n1;i 卄)for(j=0;j<n2;j 卄) (cout«bij«/z cout«endi ;)void wf()(int s;char *w5 = z/e->te' ", "ette,/e", "t->f”、"t ->*f/e", "f-> (e)/i d&quo
4、t; cout«/z文法为:/z«end i ;for (s=0; s<5; s卄)cout«ws «end i ;)void select()cout«/,select 集合为:zz«end i ;cout«z,1. seiect(e->te )=first(te* ) = (, id)"<<endi ;cout«/z2. se i ect (e' ->+te' )=f i rst (+te') = + "<<end i;cou
5、t«/z3. seiect (e ->e) =first(e)ufollow(e )-e) = ($,)"<endi;cout«/z4. seiect (t-ft') = (, id /z«endi;cout<<"5. seiect(t' ->*f) = *"<<endi;cout«/z6. se i ect (t* ->e) = +,), $),«end i ;cout«z/7. se i ect (f-> (e) = (),z
6、71;end i ;cout«/z8. se i ect (f-> i d) = i d)/z«end i ;cout«z/为 ll (1)文法z,«end i ;)void showa ()(int i ;cout«,/分析栈为:z,«end i;for(i=0; i<n3; i卄)(i f (ai ! =0) cout«ai ;cout«end i ;void showb() int j;cout«z,输入流为:"<<end i ;for(j=0;j<n4;j+
7、)if (cj !二null)cout«cj ;cout«end i ;1void fx()cout«z,分析如下:"<<endl ;showa () ; showb ();int i, j, m, n;i = l 0 ; j=j 0 ;m=m () ; n=n ();whi le (am !=*$*)if (am !=cn)&&(bi j !二null)am=bijo;am+1二 bijl;am+2=bi j 2;showa () ; showb () ; m=m () ;n=n ();if (am=cn) ( else m
8、=m() ;n=n() : i = l () ; j=j0 ;else if (a m =cn)a m =null; c n =null; showa () ; showb ();m=m() ;n=n() ; i = l () ; j=j 0 ;)1void main()(wf() ;select() ;fxb();fx();)算符优先:void main() int i, j,k=o;printfc请输入文法规则数:");scanf&r);printf c请输入文法规则:n");for (i=0; i<r; i 卄)scanf ("%s"
9、, sti);/存储文法规则,初始化firstvt集和lastvt集 firsti0=0;/*firsti0和 last订0分别表示 sti0非终极符的 firstvt 集和 lastvt 集中元素的个数*/lasti0=0;for (i=0; i<r; i+)判断文法是否合法for(j=0;sti j!二'0' ; j+)if(sti0'a' | |sti0>'z')printfc不是算符文法!n") ;exit(-l)汀if (sti j>=, a' &&sti j<=, z'
10、)if(stij+l>= a'&&stij+l<= z')printf ("不是算符文法! n") ; exit (-1);)for(i=0;i<r;i+)for(j=0;sti j != 0' ; j+)if(stij<'a |stij>'z')&&stij!='-'&&stij!=' >'&&stij!二'i')tablek+=sti j;lablek=, #' ;la
11、blek+l=, 0* ; table (); printf ("每个非终结符的firstvt集为:n"); for(i=0;i<r;i+) printf (*%c: ", stio);for (j=0;j<firsti0;j+)printf(*%cfirstij+1);printf ("n");printf f每个非终结符的lastvt集为:n"); for (i=0;i<r;i+)/输出每个非终结符的firstvt集/输岀每个非终结符的lastvt集printf (,z%c:sti 0);for(j=0;j<
12、;lasti0;j+)printf (*%c ", last订j+1); printf("n");printf c算符优先分析表如下:n");for(i=0;lableti0' ;i+)printf(*t%c*, lablei);printf("n");for (i=0;i<k+l;i+)printf("%ct",lablei);for(j=0;j<k+l;j+)printf(*%ct*>dataij); printf("n");printfc请输入文法输入符号串以#结
13、束:"); scanfinput);deal ();int deal () int i, j;int x, y;int z;k=l;s k二'#'for(i=0;inputi!- 0' ;i+);/输入串的长度栈置初值计算输入串的长度i=0;while(a=inputi)!二'0') if(zhongjie(sk)elsej=k-l;x=xiabiao(sj);y=xiabiao(a);if (datax y=,>') out(l, k, s);printf("%c", a);out (i+1, z, inpu
14、t);printf (*规约n");do q=sj;if(zhongjie(sj-l)j=j-l;else j=j-2;x=xiabiao(sj);y=xiabiao(q);while(datax y !='<');int m, n, n;for(m=j+1;m<=k;m+)for(n=0;n<rl;n+)for(n=l;stringnn!=, 0' ;n+)if(!zhongjie(sm)&&!zhongjie(stringnn)if(zhongjie(sm+1)&&zhongjie(stringnn+1)&
15、amp;&sm+l=stringn n+1)sj+l=stringn0; break;elseif(zhongjie(sm)if(sm=stringnn)sj+l=stringn0; break;)k=j+l;if (k=2&&a=, #') out (1, k, s); printf ("%c", a); out (i+1, z, input);printf ("结束n"); printff输入串符合文法的定义! rt);return 1;输入串符合文法的定义elseif(dataxy='t | data xy=
16、'=')移进out (1, k, s);printf ("%c", a) ;out (i+1, z, input) ;printf ("移进n");k+;sk=a;i+;elseprintf("nflase");return 0; ) printf("nflase");return 0;slr (1):void main() string a129二"s5","e","i e t s6 rm”"e","s5",
17、 "e""e","r6"s5 er zz “ frl e t s6r. e , r1"e","r3""e", "r5"string s7 = r,/e6 e2,t6:t2: "f6, f2e , s b , e , ./ . /e , rl t r1 ,e , r3 , r3 ,仁2,3)e t e t e , "e", "e",e t e t e ), ,,8 2, ”3,/ / / / / 1etete
18、,ef9f3.e,e,aetete), e.e).ete,e.eh ;e ,/ /e ,char c, cc;. string myss=;int f i ag=0;/看数字或标示符是否结束i i st<char> ss, i i;i i st<char>:iterator my it;cout«z,请输入要分析的表达式:"endl ;wh i i e (c二getchar () !=* n') flag=0;wh i le(isdigi t (c) | | i sa i pha (c) f lag二 1 ;c=getchar ();)i f
19、 (f i ag) ss. push_back (' i');if (c='n)break;ss. push_back (c);)ss. push_back (*$'); i i. push_back ('$'); i i. push_back (' o'); wh i le(1)(if (get (ss. front () !=-1)/输入栈myss=a get i (i i. back () get (ss. front ();eise cout«,/错误! ,«endl;break;if (myss. at (0)='s') i i. push_back (ss. front () ;/i 进入ss. pop_front () ;/将 i 删除i i push-back(myss at (1);/5进入)e i se i f (myss. at (0)=' r*) for(int i=0;i<smyss. at(1)-48. at(1)-48;i+)i i. pop_back () ;/出栈 n 位cc=ll.back (); /保存当前状态i i. push_back (s myss. at (1)-48. at (0) ;/大写字母i i. push_bac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 挖掘机拆迁安全协议书
- 《水分析化学》重点笔记
- 2024-2025学年六年级上册数学北师大版期中模拟检测卷(1-3单元)(含答案)
- 气体储存技术新进展
- 高考数学复习:三角函数的概念与三角公式应用
- 合伙企业的账务处理-做账实操
- 2024年煤层气(煤田)项目资金需求报告代可行性研究报告
- 【北京】期中模拟卷【18-19章】
- 公司生产设备购买合同(3篇)
- 左传读书心得体会三篇
- 2024年国家公务员考试《行测》真题卷(行政执法)答案和解析
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 飞机试飞测试的现状与对策
- 图案—国外现代图案ppt课件
- 高中数学 第二章 空间向量与立体几何 2.3.3 空间向量运算的坐标表示课件2 北师大版选修2-1
- 中国南阳介绍PPTppt
- (高三化学试卷)--北京四中高三上学期期中测验化学试题
- 温州市第十四高级中学化学学科课程建设纲要
- 输煤运行专业危险点及防范措施
- 一年级下册语文课件-第13课《画家乡》|北京版(2016)1 (共14张PPT)
评论
0/150
提交评论