实验二 递归下降语法分析程序设计
实验二 递归下降语法分析程序设计
实验二 递归下降语法分析程序设计
[实验目的]:
1.了解语法分析的主要任务。 2. 熟悉编译程序的编制。
[实验内容]:根据某文法,构造一基本递归下降语法分析程序。给出分析过程中所用的产生式序列。 [实验要求]:
1. 构造一个小语言的文法,例如,Pascal语言子集的文法,考虑其中的算术表达式文法:
G[<表达式>]:G[E]:
<表达式>→<表达式>+<项>|<表达式>-<项>|<项> E→E+T|T <项>→<项>*<因式>|<项>/<因式>|<因式> T→T*F|F <因式>→<标识符>|<无符号整数>|(<表达式>) F→i|(E) 2. 设计语法树的输出形式,例如:
产生式 ……
3. 编写递归下降语法分析程序
实现基本的递归下降分析器,能够分析任给的符号串是否为该文法所定义的合法算术表达式。实验报告中要说明分析使用的方法。 4. 生成并输出分析过程中所用的产生式序列:
1 产生式1 2 产生式2 ……
[实验步骤]:
1. 写出一个小语言的算术表达式文法。
2. 写出该小语言的算术表达式等价的LL(1)文法。例如:
G[E]: 其中
E→TG G为E’ E→+TG|^ ^为ε T→FS S为T’ T→*FS|^ F→i|(E)
3. 编写递归下降语法分析程序。 4. 调试运行程序。 5. 结果分析。 6. 撰写实验报告。
[实验报告]:每位同学撰写一份试验报告,并提交电子版。 1. 源程序。
2. 画出流程图。
3. 实验设计过程中出现的问题及解决的方法。 4. 实验设计过程中的体会。 5. 给出程序清单。 6. 给出测试结果。
实验二 递归下降语法分析程序设计
实验报告命名规则:
个人:2013-14(1)医智(1)1107505101蔡菲菲实验二 交各班课代表汇总后,由课代表打包后,发送至老师的邮箱 班级命名规则:2013-14医智(1)实验二 截止日期:第14周周五晚11点30分
测试的结果举例
源代码:
#include <stdio.h> #include <dos.h> #include <stdlib.h> #include <string.h>
char a[50],b[50],d[200],e[10],ch; /*数组a存输入串,数组d存推导式*/
int n1,i1=0,flag=1,n=5; /*flag=1处理非终结符,flag=0处理终结符*/ int total=0; /*步骤计数器*/ int E(),E1(),T(); int G();/*E’*/ int S();/*T’*/ int F();
void input(); void input1(); void output();
实验二 递归下降语法分析程序设计
void main() /*递归分析*/ { int f,p,j=0; char x; d[0]='E';d[1]='=';d[2]='>';d[3]='T';d[4]='G';d[5]='#'; printf("请输入字符串(长度<50,以#号结束)\n"); do { scanf("%c",&ch); a[j]=ch; j++; }while(ch!='#'); n1=j;/* n1输入串实际长度 */ ch=b[0]=a[0]; printf("步骤\t文法\t分析串\t\t分析字符\t剩余串\n"); f=E1(); {system("pause"); } if (f==0) return; /*有语法错误,失败退出*/ if (ch=='#') { printf("accept\n"); /*输入串是文法的句子*/ p=0; x=d[p]; while(x!='#') { printf("%c",x); p=p+1; x=d[p]; /*输出推导式*/ } } else { printf("error\n"); printf("回车返回\n"); getchar(); getchar(); return; } printf("\n"); printf("回车返回\n"); getchar();
实验二 递归下降语法分析程序设计
getchar(); }
int E1()/* 有语法错误函数返回值为0,否则为1*/ { int f,t; printf("%d\tE-->TG\t",total); total++; flag=1; input(); input1(); f=T(); if (f==0) return(0); t=G(); if (t==0) return(0); else return(1); }
int E() { int f,t; printf("%d\tE-->TG\t",total); total++; e[0]='E';e[1]='=';e[2]='>';e[3]='T';e[4]='G';e[5]='#'; output(); flag=1;input();input1(); f=T(); if (f==0) return(0); t=G(); if (t==0) return(0); else return(1); }
int T() { int f,t; printf("%d\tT-->FS\t",total); total++; e[0]='T';e[1]='=';e[2]='>';e[3]='F';e[4]='S';e[5]='#'; output(); flag=1;input();input1(); f=F();
实验二 递归下降语法分析程序设计
if (f==0) return(0); t=S(); if (t==0) return(0); else return(1); }
int G() { int f; if(ch=='+') { b[i1]=ch; printf("%d\tG-->+TG\t",total); total++; e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#'; output(); flag=0;input();input1(); ch=a[++i1]; f=T(); if (f==0) return(0); G(); return(1); } printf("%d\tG-->^\t",total); total++; e[0]='G';e[1]='=';e[2]='>';e[3]='^';e[4]='#'; output(); flag=1; input(); input1(); return(1); }
int S() { int f,t; if(ch=='*') { b[i1]=ch; printf("%d\tS-->*FS\t",total); total++; e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#'; output();
实验二 递归下降语法分析程序设计
flag=0;input();input1(); ch=a[++i1]; f=F(); if (f==0) return(0); t=S(); if (t==0) return(0); else return(1); } printf("%d\tS-->^\t",total); total++; e[0]='S';e[1]='=';e[2]='>';e[3]='^';e[4]='#'; output(); flag=1;a[i1]=ch;input();input1(); return(1); }
int F() { int f; if(ch=='(') { b[i1]=ch; printf("%d\tF-->(E)\t",total); total++; e[0]='F';e[1]='=';e[2]='>';e[3]='(';e[4]='E';e[5]=')';e[6]='#'; output(); flag=0;input();input1(); ch=a[++i1]; f=E(); if (f==0) return(0); if(ch==')') { b[i1]=ch; printf("%d\tF-->(E)\t",total); total++; flag=0; input(); input1(); ch=a[++i1]; } else { printf("error\n"); return(0);
实验二 递归下降语法分析程序设计
} } else if(ch=='i') { b[i1]=ch; printf("%d\tF-->i\t",total); total++; e[0]='F';e[1]='=';e[2]='>';e[3]='i';e[4]='#'; output(); flag=0;input();input1(); ch=a[++i1]; } else { printf("error\n"); return(0); } return(1); }
void input() { int j=0; for (;j<=i1-flag;j++) printf("%c",b[j]); /*输出分析串*/ printf("\t\t"); printf("%c\t\t",ch); /*输出分析字符*/ }
void input1() { int j; for (j=i1+1-flag;j<n1;j++) printf("%c",a[j]); /*输出剩余字符*/ printf("\n"); }< …… 此处隐藏:3352字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




