编译系统实现完了.总结下

前段时间搞了个编译方面的东东。主要分成四部分: 1.c- (注意后面有一个横线),一个c语言的子集。c语言重要的东西都有了。而且也不算特别大。用来做编译器最好了。花的时间也不会太长。具体语言规范可以去看《编译原理设计与实践》后面的附录。这本书带了个tiny 的编译器的实现。全部用ansi c写的。我觉得写的不错的。包括它所有文件的组织。我就模仿它也搞了一个project,文件名基本一样。也用纯c写。这就意味着我不能用我最熟悉的stl了。不过也没关系。正好自己写写玩玩。大概一个多周的时间。利用自己每天下班回家晚上的时间。就把编译器写完了。前面的还好。后面的代码生成刚开始一点头绪都没有。太多的不知道了。后来想了一会。决定先生成个pcode玩玩好了。后来又与一个朋友讨论。说.net也是先生成基于栈式的代码,然后再由jit来生成基于寄存器的。我想我也可以这么干。于是我又把pcode转成了基于寄存器的代码。代码优化实在不是我现在的水平能达到的。写了好多代码,最后还是放弃了。还是老老实实生成最基本的正确的基于寄存器的代码吧。pcode转寄存器我用的直接翻译的方法。效率比较差。等那天自己学会代码优化了再来优化好了。 2。汇编器。模仿intel 汇编的格式,简化了下masm的一些东西。之前虽然看汇编代码比较多。但是没怎么写过。搞了几个伪汇编指令。想好了汇编指令怎么转字节码之后就开始写代码实现汇编器了。汇编器用c++写的。因为我的指令并不多,伪汇编指令也不多。所以实现起来挺快的。这一步弄完就可以生成自己的所谓的可执行文件了。 3。虚拟机。我的目的是为了揭开自己对这个东西的神秘感。虚拟机总的来说就是用软件模拟一个cpu。执行加载上来的可执行文件。因为指令只有20几条。所以写完代码也不需要很长时间。写完虚拟机和汇编器之后我就开始自己写汇编代码(自己定义的格式,呵呵),然后让虚拟机来执行它。慢慢的把一些写错的地方改完之后。整个虚拟机就可以跑了。然后就把3个一起测试。弄了几天之后确认所有的要求都达到了。就开始想搞个ide了。 4.ide一个用mfc做的界面。技术都是msdn 和网上搜到的。不说了。学会了用那个比较酷的语法高亮控件。

弄了几张图,先放在这里.

一个计算n!的c程序

 

 

 

 

 

 

 

 

 

生成汇编代码.效率比较差

 

由汇编器生成自定义可执行文件,然后由虚拟机来执行之.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值