天津理工大学编译原理实验2:语法的分析.docVIP

天津理工大学编译原理实验2:语法的分析.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告 学院(系)名称:计算机与通信工程学院 姓名 学号 专业 班级 实验项目 实验二:语法分析 课程名称 编译原理 课程代码 实验时间 2016年4月21日 第1、2节 2016年4月26日 第3、4节 2016年4月28日 第1、2节 实验地点 计算机软件实验室7-220 批改意见 成绩 教师签字: 实验内容: 可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法分析器: (1)E→E+T | E-T | T (2)T→T*F | T/F | F (3)F→P^F | P (4)P→(E) | i 实验目的: 1.掌握语法分析的基本概念和基本方法; 2.正确理解LL1分析法、算符优先分析法、LR分析法的设计与使用方法。 实验要求: 1.按要求设计实现能识别上述文法所表示语言的语法分析器,并要求输出全部分析过程; 2.要求详细描述所选分析方法针对上述文法的分析表构造过程; 3.完成对所设计语法分析器的功能测试,并给出测试数据和实验结果; 4.为增加程序可读性,请在程序中进行适当注释说明; 5.整理上机步骤,总结经验和体会; 6.认真完成并按时提交实验报告。 【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 使用的是LL(1)分析法,其分析表的构造方法和构造过程如下: 实验源代码: #includeiostream #includecstring #define size 1024 using namespace std; int getLength(char str[size]) { int i=0; while(str[i]!=\0) i++; return i; } int getstringLength(string str) { int i=0; while(str[i]!=\0) i++; return i; } char gettop(char stack[size],int top) { if(stack[top]!=\0) return stack[top]; else return #; } void popstack(char *stack,int *pointer) { int p=*pointer; cout\tPopup stack[p] out!; stack[p]=\0; (*pointer)--; } void pushstack(char *stack,int *pointer,string str) { int i=0; int length=getstringLength(str); cout push str in stack reversed order.; for(i=length-1;i=0;i--) { (*pointer)++; stack[(*pointer)]=str[i]; } } int getcol(char top) { switch(top) { case +: return 0; case -: return 1; case *: return 2; case /: return 3; case ^: return 4; case ): return 5; case #: return 6; case (: return 7; case i: return 8; default: coutError! This character string is not this grammer`s sentence.endl; return -1; } } void show(char str[size],int index) { int length=getLength(str); if(index!=-1) cout\t; for(int i=index+1;ilength;i++) coutstr[i]; } int main() { char str[size];//接受字符串的数组 char stack[size];//进行比对的栈 int pointer=-1;//指向栈顶的指针 int length=0;//记录字符串长度 int index=0;//记录输入字符串 char top; int i,j;//i表示行,j表示列 string production; bool match=false; st

您可能关注的文档

文档评论(0)

xx88606 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档