免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: onlyflyer
打印 上一主题 下一主题

一个使用递归下降方法实现的cminus编译器,使用nasm作为后端 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2007-11-08 18:54 |只看该作者

大概看了,不错,不过......

这位老兄不错,也喜欢玩编译器啊,同好同好。
时间不够,匆匆看了下,主要关注些核心问题,发现你也没有解决:
1、你生成的是nasm汇编,那么对if、while等需要回填技术的语句翻译,你可以用标号来实现,这样就回避了麻烦的回填。不过作为程序员,是否应该追求完美,直接翻译为机器码,逼着自己用回填技术呢?
2、寄存器饱和时,你用的是push到栈里去(我还见到过YC++生成的不用寄存器调度而狂用pop、push的恐怖代码呢),不过VC这样的编译器似乎是当作临时分配变量存于堆里的,堆似乎要比栈安全些,也更优雅些。
3、函数声明部分,你没考虑旧式的C语法,虽然旧(我不知道ANSI去掉它了没),不过许多现存程序都用这种语法,但这个分析是很麻烦的一件事,我搞了很长时间都没有个漂亮的解决方案。
说实话,虽然我们现在做到的程度其实还是很初级的语法语义分析,但很大一部分精力都得去适应标准,还有一些奇怪的语法,我感觉得用80%的精力去分析20%的语法,这部分其实蛮有挑战性的。后端的编译优化不知什么时候才能做了。
不过毕竟是C-minus嘛,能做到现在这样已经很不错了,而且代码清晰,不错不错不错!
做编译器是件极其耗费脑力的事情,只有心无杂念才能有进展,希望你能继续做下去,有空多交流交流啊

论坛徽章:
0
42 [报告]
发表于 2012-05-04 09:46 |只看该作者
请问在windows平台下怎么运行啊!!!!????急求
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP