编译原理实验二报告.docxVIP

  1. 1、本文档共18页,可阅读全部内容。
  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文档。上传文档
查看更多
编译原理实验报告 实验二基于YACC的TINY语法分析实验 一、 实验日的 在这一阶段的实验中,同学们要完成tiny编译器的语法分析工作,即用bison X具生成一 个语法分析程序,对词法分析输出的单词符号串(终结符串)进行口底向上的分析,并依次输 出用來进行归约的语法规则。 二、 Tiny语言的语法 参见教材。请大家注总,文档中给出的BNF描述并不能直接被YACC识别,而是需耍进行 适当的改写。谜大家在做实验询,仔细研究一下教材中给出的例子。 三、软件工具及文档说明 实验环境为Windows操作系统,语法分析使用的主要工具是bison。我们会提供给大家一 些基木的数据结构、程序框架以及工具软件。实验所用到的程序和工具主耍包抵两部分: 工具和程序框架(在StarterFiles路径下) 以下是主要文件的列表: pp2.dsp/dsw pp2工程文件 不需要改动 main.c 主程序 不需要改动 scanner.h 词法分析程序的头文件 不需要改动 scanner.l 词法分析程序 需要改动 parser, h 语法分析程序的头文件 不需要改动 parser. 1 语法分析程序 需要改动 utility.h 一些工具函数 不需要改动 test, frag 测试文件 不要改动 flex.exe 工具 不要改动 bison.cxc/simplc 工具 不要改动 dcbug.bat 工具 不要改动 程序的执行方法是: (0)先根据完善parse.y (否则会编译出错) (1) 运行 dcbug.bat (会生成 parser tab.h 和 parscr_(ab.c); (2) 用vc6.0打开pp2.dsw,编译链接生成pp2.cxc; (3) 运行pp2 [filename]o具中filename是对选部分,如杲没有filename?就默认是打开 tcst.frag,否则就打开filename指定的文件。这样设计,主耍考虑在调试pp2程序时比较方 便,但是测试程序时还是要对实例中给出的匕frag文件逐一进行测试。另外,大家最好自己 再编写一些合法和不介法的源文件?对程序进一步进行测试。 scanner.l是我们为大家提供的词法分析器,如果不对tiny语言本身作任何扩展,则不需要 修改它,如果想对语言进行扩展,就要对它进行相应的修改。大家也可以用口己在PP1实 验中实现的词法分析器代替scanner.l,但是一泄要保证你的词法分析器的输出和我们所提 供的词法分析器的输出是一致的,否则会影响语法分析器的实现。 2.实例(在samples路径下) *.frag *.out Tiny源程序 正确的语法分析结果 四、实验难点和重点 bison工具的使用。请大家仔细阅读教材5.5 Yacc: LA1R(1) PARSING GENERATOR和 中的内容。 二义性和冲突的解决方法。YACC在处理条件语句时会给出警告,但是按照YACC提供的两 条消除二义性的规则可以止确处理,所以这个警告不算错。但是其它的由于规则左义不完善 引起的冲突足不允许出现的。建议大家尽量通过调榕规则來消除冲突。在处理农达式时,可 以借助% left. % right和%prcc等子句消除二义性并规定优先级。 出错处理。yacc缺省的出错处理是遇到错误时输出提示信息,然后停止分析。这是基本要求。 (书上5.6 5.7分别介绍了一?般的出错处理和TINYC的出错处理)如果你希望做进一步的出 错处理,我们将把它作为一种扩展。例如,可以借助yacc提供的error终结符,在出错时跳 过一部分符号后继续进行分析。建议人家参考一下其它高级语言编译器的出错处理,然后再 编程实现。我们为大家提供的yyerror ()函数能够在输出错误信息的同时,输出行号和第 一个出错符号的列兮,你nJ?以修改这个函数以提供更全面的报错信息。无论你实现的是何种 出错处理?请都在rcadmc.txt中给出说明。 在实验2阶段,对语义信息不作处理,虽然YACC提供了$开头的一系列伪变戢可以进行 一定的语义处理,但是目前先不考虑语义,例如,对表达式不需要赋值。所有语法正确的源 程序在实验2阶段都应当被正确识别,语义错误何不考虑。 五、实验的扩展 对语言的扩展。例如增加C语言中的“ +十”和"——”运算符,增加分支结构的switch 语句等。对语言的扩展需要你口己写语法规则,并要注意不与已有规则冲突,还要对词法分 析程序进行相应的修改。如果你实现了某种decaf语言的扩展,请在readme.txt文件中说明, 并为我们提供相应的测试正例和反例。 语法规则的输出形式是必须有的,而II-定耍与答案和符合。如果你愿总输出其它形式的语 法分析结果,例如语法树,请在readme.txt中说明,并将你的结果输出到单独的文件

文档评论(0)

183****8595 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档