版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 语法分析实验报告一、实验题目算符优先分析程序二、 实验内容及要求(1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表 输出到屏幕或者输出到文件);(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)(3)给定表达式文法为: G(E): E#E# EE+T | T TT*F |F F(E)|i (4)分析的句子为: (i+i)*i和i+i)*i三、 程序源代码:#include#include#include#include#define SIZE 128char priority66; /算符优先关
2、系表数组char inputSIZE; /存放输入的要进行分析的句子char remainSIZE; /存放剩余串 char AnalyseStackSIZE; /分析栈void analyse();int testchar(char x); /判断字符X在算符优先关系表中的位置void remainString(); /移进时处理剩余字符串,即去掉剩余字符串第一个字符int k;void init()/构造算符优先关系表,并将其存入数组中priority00=;priority01=;priority02=;priority03=;priority05=;priority10=;priori
3、ty11=;priority12=;priority13=;priority15=;priority20=;priority21=;priority22=$;/无优先关系的用$表示priority23=$;priority24=;priority25=;priority30=;priority31=;priority32=;priority33=;priority41=;priority42=$;priority43=$;priority44=;priority45=;priority50=;priority51=;priority52=;priority53=;priority54=$;pr
4、iority55=;void analyse()/对所输入的句子进行算符优先分析过程的函数int i,j,f,z,z1,n,n1,z2,n2;int count=0;/操作的步骤数char a; /用于存放正在分析的字符char p,Q,p1,p2;f=strlen(input); /测出数组的长度for(i=0;i) for( ; ; ) Q=AnalyseStackj; if(AnalyseStackj-1=+|AnalyseStackj-1=*|AnalyseStackj-1=i|AnalyseStackj-1=(|AnalyseStackj-1=)|AnalyseStackj-1=#)
5、 j=j-1; else j=j-2; z1=testchar(AnalyseStackj); n1=testchar(Q); p1=priorityz1n1; if(p1=) /把AnalyseStackj+1AnalyseStackk归约为N count+; printf(%d) %st%10ct%5c%17st 归约n,count,AnalyseStack,p,a,remain); k=j+1; i-; AnalyseStackk=N; int r,r1; r=strlen(AnalyseStack); for(r1=k+1;r1r;r1+) AnalyseStackr1=0; brea
6、k; else continue;elseif(p=) /表示移进count+;printf(%d) %st%10ct%5c%17st 移进n,count,AnalyseStack,p,a,remain);k=k+1;AnalyseStackk=a;remainString();elseif(p=)z2=testchar(AnalyseStackj);n2=testchar(#);p2=priorityz2n2;if(p2=)count+;printf(%d) %st%10ct%5c%17st 接受n,count,AnalyseStack,p,a,remain);printf(该句子是该文法的
7、合法句子。n);break;elsecount+;printf(%d) %st%10ct%5c%17st 移进n,count,AnalyseStack,p,a,remain);k=k+1;AnalyseStackk=a;remainString();elseprintf(错误!该句子不是该文法的合法句子!n);break; int testchar(char x)int m;if(x=+)m=0;if(x=*)m=1;if(x=i)m=2;if(x=()m=3;if(x=)m=4;if(x=#)m=5;return m;void remainString()int i,j;i=strlen(r
8、emain);for(j=0;j#E#n);printf(1)E-E+Tn);printf(2)E-Tn);printf(3)T-T*Fn);printf(4)T-Fn);printf(5)F-(E)n);printf(6)F-in);printf(-n);printf( 算符优先关系表n); printf( + * i ( ) #n); printf( + n); printf( * n); printf( i n); printf( ( n); printf( # =n);printf(-n);printf(请输入要进行分析的句子(以#号结束输入):n); gets(input);/将输入的字符串存到数组中printf(步骤 栈 优先关系 当前符号 剩余输入串 移进或归约n);k=0;AnalyseStackk=#;AnalyseStackk+1=0;int length,i; /初始化剩余字符串数组为输入串length=strlen(input);/for(i=0;ilength;i+)remaini=inputi;remaini=0;analyse();/对所输入的句子进行算符优先分析过程的函数四、测试结果: 输入串(i+i)*i的算符优先分析过程输入串i+i)*i的算符优先分析过程五、小结(包括收获、心得体会、存在的问题及
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度farmhouse木门安装服务合同
- 深圳购房合同样本
- 住宅房屋购买合同简单版
- 2024年《软件许可合同中不可抗力事件的处理》
- 广告公司授权合同模板
- 2024年范文承包土地协议书
- 2024年发光字合同
- 跨境客运线路租赁合同
- 共建文明施工项目协议书
- 亲子园与医疗机构合作协议书
- 国开2024年《中国法律史》平时作业1-3答案
- 钢结构策划书(范本)
- 急性肾衰竭与crrt治
- 焦化厂生产工序及工艺流程图
- 呕吐(急性胃肠炎)诊疗指南(制订)编制说明排版
- 江堤道路工程施工方案#江苏
- (外研版)初中英语语法汇总[新版]
- 李燕璇植树问题卡通版5
- 有砟轨道铺设的施工讲解
- 烟草专卖食堂燃气泄露及火灾事故现场应急处置方案
- 国家电网公司十八项反措
评论
0/150
提交评论