- 1、本文档共37页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 2
实验报告封面
《编译原理》综合性
实 验 报 告
实验学期 学年 第 学期
专业 班级
学生姓名 学号
任课教师
实验成绩
实验报告格式
《编译原理》课程综合性实验报告
开课实验室:C205 2011 年12月 28日
实验题目
语法分析——LL(1)分析表的实现
一、实验目的
通过设计、开发一个高级语言的LL(1)语法分析程序,实现对源程序的语法检查和结构分析,提高语法分析方法的实践能力。
二、实验要求
本次实验的LL(1)文法为表达式文法:
S-MH
S-a
H-LSo
H-^
K-dML
K-^
L-eHf
M-K
M-bLM
具体要求如下:
1、理解语法分析在编译程序中的作用,以及它与词法分析程序的关系;
2、掌握LL(1)语法分析方法的主要原理;
3、理解LL(1)分析器模型;
4、理解LL(1)语法分析方法对文法的要求;
5、熟练掌握Select集合的求解方法和LL(1)分析表的构造方法;
6、熟练掌握文法变换方法(消除左递归和提取公因子)。
二、实验设备与环境
1.硬件:PC机Pentium100以上。
2.软件:Win2000或WinXP、VC++或JAVA等开发环境。
三、实验内容
本次试验通过判定一个LL(1)文法来实现对于LL(1)文法的分析。通过对于文法的多次迭代来求出文法的first集和follow集。本次试验应用CPP语言通过栈来实现其功能。
四、实验步骤
首先编写stack.h来实现栈规则的运算
然后编写a.h文件
最后编写主文件来实现LL1分析法的分析。
在主文件中首先把文法列入栈中,之后通过栈函数来判断每个非终结符并通过多次迭代求出其first集和follow集以及构建LL1分析表
五、实验结果及分析
六、实验小结和思考
本次试验对于C++语言应用还是不到位,逻辑性不强,对于数据结构以及栈的引用不完全熟练,程序冗余过长。
七、源程序清单
主函数:#includestdio.h
#includestring.h
#includemalloc.h
#includewindows.h
#includeconio.h
#includestdlib.h
typedef char SElemType;
#includestack.h
struct grammer
{
char **g;
int line;
char s;
char vn[27];
char vt[127];
int type;
};
struct LL
{
char **first;
char **follow;
int **form;
};
char string[255];
grammer g;
LL LL1;
char w[127];
SqStack s;
////////////////////////////////////////////
void Init();
void Input();
int OpenFile(char *s, grammer g);//成功返回1,否则返回0
void First(char *set, char s);
void Follow(char *set, char s);
void StructFirst(LL LL1);
void StructFollow(LL LL1);
void AnalysisForm(LL LL1);
void PrintLL1(LL LL1);//打印first、follow、form
void Print(char g[]);//打印一行产生式
void PrintStack(SqStack s);//从下到上打印站内容
void AnalysisProcess();//分析
void Quit();
int IsInSet(char *s, char ch);
void JoinSet(char *s, char ch);
void CreatW();//找出推出空的非终结符
///////////////////////////////////////////
void main()
{
int i;
char ch;
char filename[25];
Init();
re: printf(I = Input Grammer\nO = Open File\nQ = Quit\n);
printf(Please input your chioc : );
您可能关注的文档
- 编号jlt-010:无不当关系承诺函.doc
- 编后写作基本知识.doc
- 编绘我国山系分布图,并说明我国山系的分布规律.doc
- 编辑加工整理的内容和基本原则.ppt
- 编辑阅读与校对阅读之比较摘要.doc
- 编排设计8 宣传册 DM.ppt
- 编排设计教学大纲.doc
- 编人教版《怎么都快乐》教学课件1.ppt
- 编童话故事作文10篇汇总版.doc
- 编写高效的SQL语句.pdf
- 秋季开学典礼领导中学精彩讲话稿(7篇).doc
- 励志早安寄语(145句).doc
- ++Unit7++SectionA+Grammar+Focus-4c 人教版九年级英语全册+.pptx
- 新概念英语第二册万圣节课件.pptx
- Unit1+Past+and+present+Task 牛津译林版八年级英语下册.pptx
- Unit1+Section+B+(2a—2e) 人教版八年级英语上册.pptx
- Unit4+Section+B+3a~3c 人教版八年级英语上册.pptx
- 连词and+,but和so+的用法 人教新目标Go+For+It!英语八年级上册.pptx
- 期末专题复习+Imperatives 外研版英语八年级上册.pptx
- Unit+8+A+green+world+Grammar 牛津译林版八年级英语下册.pptx
文档评论(0)