西安交大编译原理语法分析器实验报告.docxVIP

西安交大编译原理语法分析器实验报告.docx

  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文档。上传文档
查看更多
编译原理课内实验报告 学生姓名 石磊 专业/班级 计算机26 学 号 2120505140 所在学院 电信学院 提交日期 2014-12-2 一:实验目的: 1.强化对系统软件综合工程实现能力的训练; 2.加强对语法分析原理、方法和基本实现技术的理解; 二:实验内容 1. 用C语言或者其他的高级语言作为宿主语言完成C0语言的词法分析器的设计和实现。 2. 针对if语句的文法编写一个递归下降分析程序,输出结果为抽象语法树。注意,if语句文法中的表达式E采用四则运算表达式的文法;抽象语法树的格式自行设计,如果需要降低难度的话,也可用具体语法树而不用抽象语法树作为输出。 三:实验功能描述 编写C0语言的语法分析器的源程序并调试通过。其中语法分析程序既可以自己手动去完成,也可以利用YACC自动生成。 2. 通过测试程序的验收; 四:功能描述: 该语法分析器用yacc生成,针对if语句的文法编写的向下递归程序,输出结果为语法树,实现了实验目标,达到了实验要求。 五:实验程序代码 %{ #include string.h #include stdlib.h #include yystype.h #include y.tab.h #include treedisp.h int yycount = 0; extern YYSTYPE yylval; #define NSYMS 20 struct symtab { char *name; double value; } symtab[NSYMS]; struct symtab *symlook(char *s); #define NRSVS 10 struct rsvtab { char *name; int id; } rsvtab[NRSVS] = { {if, IF}, {else, ELSE}, {while, WHILE}, {for, FOR}, {other, OTHER}, {var, VAR} }; int rsvlook(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}+ other other %% {integer} { //yylval = atoi(yytext); rec_token(INTEGER); return INTEGER; } {identifier} { if (rsvlook(yytext) != 0) { rec_token(RESERVED); return rsvlook(yytext); } rec_token(SYMBOL); return SYMBOL; {eq} { rec_token(OPR); return EQ; } {pl} { rec_token(OPR); return PL; } {mi} { rec_token(OPR); return MI; } {mu} { rec_token(OPR); return MU; } {di} { rec_token(OPR); return DI; } {as} { rec_token(OPR); return ASSIGN; } {sc} { rec_token(SC); return SC; } \( { rec_token(LB); return LB; } \) { rec_token(RB); return RB; } {ws} ; . { printf(error: %s\n, yytext); yyerror(Illigal input.); } %% char *buffer[20]; void rec_token(char *s) { yylval.token_id = ++yycount; yylval.text = strdup(yytext); sprintf(buffer, %s(%s), s, yytext); name_node(yycount, buffer); } int rsvlook(char *s) { struct rsvtab *sp; f

文档评论(0)

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

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

1亿VIP精品文档

相关文档