编译原理语法分析——LL(1)分析表的实现.doc

编译原理语法分析——LL(1)分析表的实现.doc

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 : );

文档评论(0)

_______ + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档