- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二 递归向下分析法
一、 实验目和要求
根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
二、 实验内容
功能描述
1、递归下降分析法的功能
词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。
2、递归下降分析法的前提
改造文法:消除二义性、消除左递归、提取左因子,判断是否为 LL(1)文法,
3、递归下降分析法实验设计思想及算法
为 G 的每个非终结符号 U 构造一个递归过程,不妨命名为 U。
U 的产生式的右边指出这个过程的代码结构:
1)若是终结符号,则和向前看符号对照, 若匹配则向前进一个符号;否则出错。
2)若是非终结符号,则调用与此非终结符对应的过程。当 A 的右部有多个产生式时,可用选择结构实现。
具体为:
1)对于每个非终结符号 U-u1|u2|…|un 处理的方法如下: U( )
{
ch=当前符号;
if(ch 可能是 u1 字的开头) 处理 u1 的程序部分; else if(ch 可能是 u2 字的开头)处理 u2 的程序部分;
…
else error()
}
2)对于每个右部 u1-x1x2…xn 的处理架构如下:处理 x1 的程序;
处理 x2 的程序;
…
处理 xn 的程序;
3)如果右部为空,则不处理。
4)对于右部中的每个符号 xi
①如果 xi 为终结符号: if(xi= = 当前的符号)
{
NextChar(); return;
}
else
出错处理
②如果 xi 为非终结符号,直接调用相应的过程 xi() 说明: NextChar 为前进一个字符函数。
程序结构描述程序要求:
程序输入/输出示例:
对下列文法,用递归下降分析法对任意输入的符号串进行分析:
(1)E-TG
(2)G-+TG|—TG
(3)G-ε
(4)T-FS
(5)S-*FS| / FS
(6)S-ε
(7)F-(E)
(8)F-i
输入出的格式如下:
(1)E 盘建立一个文本文档 222.txt存储一个以#结束的符号串(包括+—*/()i#),在此位 置 输 入 符 号 串 例 如 :i+i*i# (2) 输出结果:i+i*i#为合法符号串
备注:输入一符号串如 i+i*#,要求输出为“非法的符号串”
函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用关系图。程序所用主要参数和头文件说明:
#includestdio.h
#includestdlib.h
#includestring.h
FILE *fp; //定义一个全局文件指针变量
char ch; //定义一个全局字符变量
#define N 20 //定义一个数组大小常量
char string[N]; //定义一个用于存储算式字符串的数组char *p; //定义一个全局字符指针变量
函数说明:
非终结符函数 E()
函数功能描述:根据以上文法要求 E-TG,所以从主函数开始调入第一个非终结符函数执行,显示调用产生式,依次嵌套调用非终结符函数 T()和 G(),进行递归向下分析。 void E(){printf(E---TG..............%c\n,ch);
T();
G();}
非终结符函数 T()
函数功能描述:根据以上文法要求 T-FS,首先显示算式匹配所用的显示调用的产生式, 依次嵌套调用非终结符函数 F()和 S(),进行递归向下分析。
void T(){
printf(T---FS..............%c\n,ch); F();
S();}
非终结符函数 G()
函数功能描述:根据以上文法要求 G-+TG|—TG ,G-ε,如果当前字符变量 ch 为“+”,
则显示调用产生式,首先嵌套调用 test()函数判断是算式递归向下分析是否结束,若没有结束则继续依次嵌套调用非终结符函数 T()和 G();如果当前字符变量 ch 为“-”,则显示调用产生式,从文件文档中读取下一个字符,让字符指针变量指向下一个字符,继续依次嵌套调用非终结符函数 T()和 G();如果当前字符变量 ch 既不为“+” 也不为“-”,非终结符 G 指向为空,函数只用于显示指向为空,找不到可以和文件中字符匹配的非终结符。void G(){ if (ch==+){ printf(G---+TG..............%c\n,ch);
*p=ch; p++;
ch=fgetc(fp); T();
G(); }
else if(ch==-)
{ printf(G----TG..............%c\n,ch);
*p=ch; p++;
ch=fgetc(fp); T
您可能关注的文档
- 液晶电光效应实验报告(完整版).docx
- 殷墟组卜辞的整理与研究.docx
- 永康五金出口的现状及对策分析.doc
- 永年县粒粒香小米加工厂作业指导书.doc
- 油轮-油气码头安全指南-2006.docx
- 游客服务中心设计探析 .doc
- 游乐场承包协议.doc
- 游戏对幼儿的教育作用.doc
- 游泳馆人员管理制度.doc
- 浙江大学舟山校区人工湖管理办法.doc
- 湖北吉雅箱包有限公司环保验收正文 专业 .pdf
- 湖北省农家乐星级划分与评定 .pdf
- 湖北武汉市江岸区重点名校2024年初中语文毕业考试模拟冲刺卷含解析.pdf
- 2024聊城市茌平区职业教育中心学校工作人员招聘考试试题及答案.docx
- 2024聊城现代交通职业中等专业学校工作人员招聘考试试题及答案.docx
- 《机器人建模与控制 》 课件 第4章-机器人逆运动学.pdf
- 2024苏州建设交通高等职业技术学校工作人员招聘考试试题及答案.docx
- 游艺用品市场趋势预测与商机挖掘考核试卷 .pdf
- 2024湖南省隆回县职业中等专业学校工作人员招聘考试试题及答案.docx
- 湖北重点项目-年产6000吨蛹虫草菌粉项目可行性研究报告(撰写大纲).pdf
最近下载
- 第18课 大家一起真快乐(课件)-2024冀美版美术二年级上册.pptx
- 人教版九年级化学上册全册教案(完整版)教学设计含教学反思.pdf
- 蒂森电梯L4技术等级考试试题.pdf
- 八年级英语下册教案:Unit 4 Why don’t you talk to your parents.doc VIP
- 实务手册-—房地产手册(精编)全套.pdf
- 耀华XK3190-A9使用说明书.pdf
- 天下兴亡匹夫有责(班会课)(逃出大英博物馆).pptx VIP
- 蒂森克虏伯扶梯L3试卷.pdf VIP
- 人教版初中英语课标版 九年级第十单元Section A 3a—3c(21张).pptx
- 中小企业融资-全套PPT课件.pptx
文档评论(0)