编译系统实现完了.总结下
来源:互联网 发布: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程序
生成汇编代码.效率比较差
由汇编器生成自定义可执行文件,然后由虚拟机来执行之.
- 编译系统实现完了.总结下
- linux系统编译链接总结--高级c/c++编译技术读后总结(下)
- 今天考完了数据库系统
- 暑假完了之后的总结
- 昨天终于把OCM考完了(写了下总结)
- Ubuntu下Ffmpeg编译及实现流播放总结
- Ubuntu下Ffmpeg编译及实现流播放总结
- Android开发linux下系统大模块编译、单模块编译、代码定位、指令总结
- 完了!
- 完了
- 完了
- Android4.4 系统下实现自动关机的方法总结 .
- android编译系统学习总结
- 编译Android4.4系统总结
- YOCTO编译系统使用总结
- Linux常见编译系统总结
- 考完了,顺便总结一点东西
- 考完了,写个总结吧....
- JIRA 系统安装与使用
- 两个有用的,ms未公开的存储过程sp_MSforeachDB,sp_MSforeachtable
- C#中的常见的文件操作
- 记录几个网站
- You and Your Research (By Dr. Richard W.Hamming)
- 编译系统实现完了.总结下
- WinCE 桌面修改
- CEShell文件夹中的类关系
- 【转载】YOU AND YOUR RESEARCH (节选译文)
- SP 短信开发-基础知识篇
- ASP.NET从SQL Server数据库提取图片并显示在DataGrid
- 生成独立于CB的exe文件--c++bulider
- 数据恢复技术大揭密
- oracle之CLOB处理完整版(Inber摘抄学习用)