版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.华北水利水电学院编译原理实验报告一、 实验题目 :语法分析 (算符优先分析程序)( 1)选择最有代表性的语法分析方法算符优先法;( 2)选择对各种常见程序语言都用的语法结构,如赋值语句 (尤指表达式 )作为分析对象,并且与所选语法分析方法要比较贴切。二、 实验内容( 1)根据给定文法 ,先求出 FirstVt 和 LastVt 集合 ,构造算符优先关系表 (要求算符优先关系表输出到屏幕或者输出到文件 );( 2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程 )( 3)给定表达式文法为 :G(E): E#E# EE+T | TT T*F |FF(E)|
2、i(4) 分析的句子为 : (i+i)*i 和 i+i)*i三、程序源代#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>专业 .专注.#define SIZE 128char priority66;/ 算符优先关系表数组char inputSIZE;/ 存放输入的要进行分析的句子char remainSIZE;/ 存放剩余串char AnalyseStackSIZE;/ 分析栈void analyse();inttestchar(char x);/
3、判断字符X 在算符优先关系表中的位置void remainString();/ 移进时处理剩余字符串,即去掉剩余字符串第一个字符int k;void init()/构造算符优先关系表,并将其存入数组中priority00='>'priority01='<'priority02='<'priority03='<'priority04='>'priority05='>'priority10='>'priority11='>'
4、priority12='<'priority13='<'priority14='>'专业 .专注.priority15='>'priority20='>'priority21='>'priority22='$'/无优先关系的用$表示priority23='$'priority24='>'priority25='>'priority30='<'priority31=
5、39;<'priority32='<'priority33='<'priority34='='priority35='$'priority40='>'priority41='>'priority42='$'priority43='$'priority44='>'priority45='>'专业 .专注.priority50='<'priority51='&l
6、t;'priority52='<'priority53='<'priority54='$'priority55='='void analyse()/对所输入的句子进行算符优先分析过程的函数FILE *fp;fp=fopen("li","a");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&l
7、t;=f;i+)a=inputi;if(i=0)remainString();专业 .专注.if(AnalyseStackk='+'|AnalyseStackk='*'|AnalyseStackk='i'|AnalyseStackk='('|AnalyseStackk=')'|AnalyseStackk='#')j=k;elsej=k-1;z=testchar(AnalyseStackj);/ 从优先关系表中查出s j和 a 的优先关系if(a='+'|a='*'|a
8、='i'|a='('|a=')'|a='#')n=testchar(a);else / 如果句子含有不是终结符集合里的其它字符,不合法printf(" 错误 !该句子不是该文法的合法句子!n");break;p=priorityzn;if(p='$')printf(" 错误 !该句子不是该文法的合法句子!n");return;if(p='>') for( ; ; )专业 .专注.Q=AnalyseStackj;if(AnalyseStackj-1=
9、9;+'|AnalyseStackj-1='*'|AnalyseStackj-1='i'|AnalyseStackj-1='('|AnalyseStackj-1=')'|AnalyseStackj-1='#')j=j-1;elsej=j-2;z1=testchar(AnalyseStackj);n1=testchar(Q);p1=priorityz1n1;if(p1='<')/ 把 AnalyseStack j+1AnalyseStackk归约为 Ncount+;printf(&quo
10、t;(%d)%st%10ct%5c%17st归约n",count,AnalyseStack,p,a,remain);fprintf(fp,"(%d)%st%17st%sn",count,AnalyseStack,remain,"归约 ");k=j+1;i-;AnalyseStackk='N'int r,r1;r=strlen(AnalyseStack);for(r1=k+1;r1<r;r1+)专业 .专注.AnalyseStackr1='0'break;elsecontinue;elseif(p='
11、<')/ 表示移进count+;printf("(%d)%st%10ct%5c%17st移进n",count,AnalyseStack,p,a,remain);fprintf(fp,"(%d)%st%17st%sn",count,AnalyseStack,remain,"移进 ");k=k+1;AnalyseStackk=a;remainString();elseif(p='=')专业 .专注.z2=testchar(AnalyseStackj);n2=testchar('#');p2=p
12、riorityz2n2;if(p2='=')count+;printf("(%d)%st%10ct%5c%17st接 受n",count,AnalyseStack,p,a,remain);fprintf(fp,"(%d)%st%17st%sn",count,AnalyseStack,remain,"接受 ");printf(" 该句子是该文法的合法句子。 n");fprintf(fp,"%s","该句子是该文法的合法句子。 n");break;elsecoun
13、t+;printf("(%d)%st%10ct%5c%17st移 进n",count,AnalyseStack,p,a,remain);fprintf(fp,"(%d)%st%17st%sn",count,AnalyseStack,remain,"移进 ");k=k+1;专业 .专注.AnalyseStackk=a;remainString();elseprintf(" 错误 !该句子不是该文法的合法句子!n");fprintf(fp,"%s","错误!该句子不是该文法的合法句子。 n
14、");break;fclose(fp);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(remain);for( j=0;j<i;j+)remainj=remainj+1;remaini-1='0'void
15、main()int m,n;char s16= '+','*','i','(',')','#'专业 .专注.init();printf(" 文法为 : n");printf("(0)E'->#E#n");printf("(1)E->E+Tn");printf("(2)E->Tn");printf("(3)T->T*Fn");printf("(4)T->F
16、n");printf("(5)F->(E)n");printf("(6)F->in");FILE *fp;fp=fopen("li","w");fprintf(fp,"%s","要分析的文法为:n");fprintf(fp,"%s","(0)E'->#E#n");fprintf(fp,"%s","(1)E->E+Tn");fprintf(fp,"
17、%s","(2)E->Tn");fprintf(fp,"%s","(3)T->T*Fn");fprintf(fp,"%s","(4)T->Fn");fprintf(fp,"%s","(5)F->(E)n");fprintf(fp,"%s","(6)F->in");fprintf(fp,"%s","优先关系表为:n");fprintf(fp
18、,"%s","+*i()#n");for(m=0;m<6;m+)专业 .专注.fprintf(fp,"%c",s1m);for(n=0;n<6;n+)fprintf(fp,"%c",prioritymn);fprintf(fp,"%s","n");printf("-n");printf("算符优先关系表 n");printf("+*i()#n");printf("+><<<
19、;>>n");printf("*>><<>>n");printf("i>>>>n");printf("(<<<<=n");printf(")>>>>n");printf("#<<<<=n");printf("-n");printf("请输入要进行分析的句子(以# 号结束输入 ):n");gets(input);/将输入的字符串存到数组中fprintf(fp,"%s","需要分析的字符串为: n");fprintf(fp,"%s&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024产品购销合同书范本
- 大型餐饮企业中央厨房管理方案
- 吉林大学《数学建模的机械应用》2021-2022学年第一学期期末试卷
- 2024专利权转让合同文本
- 吉林大学《机器学习与模式识别II(双语)》2021-2022学年期末试卷
- 2024装饰阶段工程承包合同
- 学校安全隐患排查与防范制度
- 基于游戏化的英语课堂教学情境方案
- 古代文物与民俗文化展览方案
- 建筑行业防疫知识培训制度
- 妇科护理进修汇报
- 新团员团课培训课件
- 学校篮球教练外聘协议书
- 工作流程改进汇报
- 浙教版六年级劳动项目三-任务二《创意班规巧设计》课件
- 高思学校竞赛数学课本五年级
- 计算机应用与人工智能基础项目9 人工智能
- 油田开发方案及调整方案经济评价技术要求
- 物业管理应急响应能力提升及案例分析
- 康复科常见疾病护理常规2023版
- 英汉互译单词练习打印纸
评论
0/150
提交评论