微型语言编译器.PDFVIP

  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文档。上传文档
查看更多
微型语言编译器

微型语言编译器  Author:谭添升(031162020)  时间:2006年5月28日  功能以及使用说明:  开发环境:WindowsXp+Cygwin+Flex+BYacc+gcc  使用说明:源程序主要有scan.l 和grammer.y,main.c,global.h.  global.h主要为Lex和Yacc以用主程序main.c要共同使用的变量声明.,scanl.l为lex 说明文件,是词法分析程序,Gramer.y为Yacc说明文件,其内容包括语法分析,代码生成等. 由于scanl.l与grammer.y均是在Cygwin环境下编译,对一般Xp系统,可能无法编译,所以 我已经下载了flex和byacc 的windows版本,放在ForWin下,,只要装了VC++6.0(其它的 没试过)在windows机器上也可以编译说明文件,并且提供了MAKEFILE,在ForWin作为 当前目录时使用VC++自带的NMAKE 实用程序即可从scan.l和grammer.y构建编译器, 生成的main.exe 即可运行.  main.c为实际的主程序,主要将生成的指令数组写入到文件.  使用编译器:编译源文件的方法为:Usage:main soucefile [destfile], 其中的目标文件 可以省略,默认为当前目录下的a.txt.本文最后附有成功构建和编译测试文件的截图, 可 供参考.  code 目录下附有我的一些测试文件,和一个求最大公约数的程序,比较容易看明白.  本编译器接收的文法. ① 基本上按照老师给的PPT给出的文法,但有几处修改.首先是Dec 和Body之间的分 号被去掉,因为存在这个分号会和Vardec和Dec之间的分号冲突,而遇到这种冲突,YACC是尽 量移入,导致Body 不能得到归约. ② 另一个是Statement的规则右部少了ReadSt,和WriteSt,导到这两个符号不能规约,这 应该是原文法的一个失误.总之,这两处修改基本不改变可接收的语言.除了一个分号. ③ 示例源程序如下(本编译器支持类C 的注释风格): /*变量重定义,编译器可以检测到,并给出重定义的变量*/ /*error:line 6variable a redefinition*/ vara:int; varb:real; varc:real; vara:real begin a:=1; b:=1.5; c:=2.5 end  翻译方案的实现 在YACC 的说明文件中,语义动作使用了带回填的翻译方案.其中的Jumplist 为回填所使 用的指令指针表.为便于回填,生成的代码指令预先放入结构体数组structCode code[]中,具体 实现请参考grammer.y文件. 附: ForLinux版本: ForWin版本(有waning但编译成功): Forwin的main.exe来编译程序(由于Flex和byacc 是Fordos的,所以可能nmake 后即编译不 能显示汉字.

文档评论(0)

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

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

1亿VIP精品文档

相关文档