实验二 递归下降语法分析程序设计
更新时间:2023-11-10 05:47:01 阅读量: 教育文库 文档下载
- 实验二小推荐度:
- 相关推荐
实验二 递归下降语法分析程序设计
[实验目的]:
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
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(\ a[j]=ch; j++; }while(ch!='#'); n1=j;/* n1输入串实际长度 */ ch=b[0]=a[0]; printf(\步骤\\t文法\\t分析串\\t\\t分析字符\\t剩余串\\n\ f=E1(); {system(\} if (f==0) return; /*有语法错误,失败退出*/ if (ch=='#') { printf(\输入串是文法的句子*/ p=0; x=d[p]; while(x!='#') { printf(\ p=p+1; x=d[p]; /*输出推导式*/ } } else { printf(\ printf(\回车返回\\n\ getchar(); getchar(); return; } printf(\ printf(\回车返回\\n\ getchar();
getchar(); }
int E1()/* 有语法错误函数返回值为0,否则为1*/ { int f,t; printf(\ 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(\ 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(\ 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(\ 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(\ 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(\ e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#'; output();
正在阅读:
实验二 递归下降语法分析程序设计11-10
《江苏省建筑业企业信用管理手册(省外建筑施工企业资质、资格核04-14
高考最新密破考情卷04-22
西藏区编六年级上册期末试卷07-10
(全英文论文)浅谈跨文化交际中的理解障碍06-08
翻译专业理论必读书目10-09
浅析小学语文作业(2)-最新教育文档03-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 递归
- 程序设计
- 语法
- 下降
- 实验
- 分析
- 2018年考试知识点复习考点归纳总结
- VFP程序填空习题
- 葫芦岛市建筑工程公司名录2018版184家
- 2018届高三物理二轮复习专题五物理实验第2讲电学实验对点规范演练
- 康菲漏油事件中反映出来的环境保护问题
- 2016年上半年陕西省造价工程师知识点:缺陷责任期的期限考试题
- 高维面板数据降维与变量选择方法研究
- 甘肃省幼儿园保教管理指导意见(试行)
- 浙江省科研院所、省级企业研究院名单
- 船闸管理制度
- 2012年大学英语三级(cet3)B级考前押密试卷(5)-中大网校 - 图文
- 税法计算题
- 幸福工程救助贫困母亲典型案例2
- 专题复习一 正确使用标点符号
- 电子课程设计报告以七彩循环灯为例
- 人教版八年级下册思品期末试题及答案
- 中职语文《我的空中楼阁》思考练习参考
- 业务需求方案-多法人架构体系 v0.4
- (客户用)施工方案2012920 - 图文
- 水处理行业几种主要超滤产品特点 - 图文