yacc语法分析器实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
yacc语法分析器实验报告   编译原理课内实验报告   学生姓名石磊   专业/班级计算机26   学号   所在学院电信学院   提交日期XX-12-2   一:实验目的:   1.强化对系统软件综合工程实现能力的训练;   2.加强对语法分析原理、方法和基本实现技术的理解;   二:实验内容   1.用C语言或者其他的高级语言作为宿主语言完成C0语言的词法分析器的设计和实现。   2.针对if语句的文法编写一个递归下降分析程序,输出结果为抽象语法树。注意,if语句文法中的表达式E采用四则运算表达式的文法;抽象语法树的格式自行设计,如果需要降低难度的话,也可用具体语法树而不用抽象语法树作为输出。三:实验功能描述   1.编写C0语言的语法分析器的源程序并调试通过。其中语法分析程序既可   以自己手动去完成,也可以利用YACC自动生成。   2.通过测试程序的验收;   四:功能描述:   该语法分析器用yacc生成,针对if语句的文法编写的向下递归程序,输出结果为语法树,实现了实验目标,达到了实验要求。   五:实验程序代码   %{   #include   #include   #include   #include   #include   intyycount=0;   externYYSTYPEyylval;   #defineNSYMS20   structsymtab{   char*name;   doublevalue;   }symtab[NSYMS];   structsymtab*symlook(char*s);   #defineNRSVS10   structrsvtab{   char*name;   intid;   }rsvtab[NRSVS]={   {if,IF},   {else,ELSE},   {while,WHILE},   {for,FOR},   {other,OTHER},   {v(来自:写论文网:yacc语法分析器实验报告)ar,VAR}   };   intrsvlook(char*s);   %}   digit[0-9]   integer{digit}+   eq==   pl+   mi-   mu*   di/   sc;   as=   identifier[a-zA-Z][a-zA-Z0-9_]*   delim[\n\t]   ws{delim}+   otherother   %%   {integer}{   //yylval=atoi(yytext);   rec_token(INTEGER);   returnINTEGER;   }   {identifier}{   if(rsvlook(yytext)!=0){   rec_token(RESERVED);   returnrsvlook(yytext);   }   rec_token(SYMBOL);   returnSYMBOL;   {eq}{rec_token(OPR);returnEQ;}   {pl}{rec_token(OPR);returnPL;}   {mi}{rec_token(OPR);returnMI;}   {mu}{rec_token(OPR);returnMU;}   {di}{rec_token(OPR);returnDI;}   {as}{rec_token(OPR);returnASSIGN;}{sc}{rec_token(SC);returnSC;}   \({rec_token(LB);returnLB;}   \){rec_token(RB);returnRB;}   {ws};   .{   printf(error:%s\n,yytext);   yyerror(Illigalinput.);   }   %%   char*buffer[20];   voidrec_token(char*s){   _id=++yycount;   =strdup(yytext);   sprintf(buffer,%s(%s),s,yytext);name_node(yycount,buffer);   }   intrsvlook(char*s){   structrsvtab*sp;   for(sp=rsvtab;spname!strcmp(sp-name,s))returnsp-id;   }   return0;   }   structsymtab*symlook(char*s){   structsymtab*sp;   for(sp=symtab;spname!strcmp(sp-name,s))returnsp;   if(!sp

文档评论(0)

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

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

1亿VIP精品文档

相关文档