- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)