版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广东省连州市高考物理二轮专题模拟卷附参考答案详解【研优卷】
- 2026年河南省义马市高二化学下册期末考试模拟卷及参考答案【研优卷】
- 2026年山东省荣成市高二化学下册期末考试模拟试卷完整版附答案
- 2026-2030中国家装行业市场发展分析及前景趋势与投资研究报告
- 2026年湖北省钟祥市高二化学下册期末考试模拟考试卷带答案(基础题)
- 2026年广东省开平市高二化学下册期末考试模拟卷及答案【名校卷】
- 2026年浙江省永康市高二化学下册期末考试模拟检测卷【易错题】附答案
- 公司年度培训计划方案
- 2026年湖北省安陆市高二化学下册期末考试模拟检测卷及参考答案【满分必刷】
- 2026年吉林省扶余市高二化学下册期末考试模拟试卷附完整答案【考点梳理】
- 2026年青岛中考物理考试试题及答案
- 2026储能系统集成商竞争策略与市场份额报告
- 锅炉工安全操作培训内容
- 加油站危险作业审批制度
- 过敏性休克诊疗规范课件
- 2025-2026学年统编版初中历史九年级下册(全册)各单元知识点复习要点梳理
- 郴州市北湖区公费师范生招聘真题2025
- DB42∕T 2521-2026 湖北省生活和服务业用水定额
- 2026年四川省专业技术人员公需科目试题答案
- 2026年养老服务中心招聘考试笔试试题(含答案)
- 早孕关爱门诊服务流程规范手册
评论
0/150
提交评论