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

来源:互联网 发布:javascript 字符表示 编辑:程序博客网 时间:2024/05/21 13:30

前段时间搞了个编译方面的东东。主要分成四部分: 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程序

 

 

 

 

 

 

 

 

 

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

 

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

原创粉丝点击