【开源】司马编译器结构
2009-02-22 17:30
134 查看
编译器前段部分:源代码经过预处理模块处理之后,剔除了一些空格,跟注释,把源代码重新组织给了词法分析器,词法分析器处理后形成了记号流,记号(终结符、非终结符)被存放到了词法表中。语法分析器根据词法表中的终结符、非终结符开始语法分析。需要注意的是,在该体系结构中,词法分析器、语法分析器、语义分析器之间没有接口存在。这样做是有好处的,例如当改动语法分析器的时候,影响不到词法分析器,反之亦然,提高了维护性。
驱动整个编译前端的是词法表,产生式的所有元素都存在这里面。对符号表的引用是在语义分析阶段开始的,该结构使得各个阶段的模块关系都比较简单,虽然这样会降低在时间上的性能,因为把语义分析让语法分析器完成是可行的,但这会降低维护性能。
处理模块处理之后,剔除了一些空格,跟注释,把源代码重新组织给了词法分析器,词法分析器处理后形成了记号流,记号(终结符、非终结符)被存放到了词法表中。语法分析器根据词法表中的终结符、非终结符开始语法分析。需要注意的是,在该体系结构中,词法分析器、语法分析器、语义分析器之间没有接口存在。这样做是有好处的,例如当改动语法分析器的时候,影响不到词法分析器,反之亦然,提高了维护性。
编译器后端部分:一个可移植性高的编译器它的后端必须尽可能的跟“具体语言”无关。“中间代码生成”从符号表、二叉树、词法表中获得“表达式”“控制结构”后将其翻译为三地址码。优化器把“三地址码表”中的代码优化之后又存入到了三地址码中,三地址码跟汇编码有很直接的对应模式,所以从三地址码到汇编码的转换并不会很麻烦,存储空间分配也是在这个“时刻”进行的,最终汇编代码会被存入“汇编码表”。“机器码生成”模块把“汇编码表”中的代码一对一映射到了二进制的机器码,这一步最简单。
司马编译器:
开发:
项目地址:
http://gforge.osdn.net.cn/projects/unixtok/
相关文章推荐
- 【开源】司马编译器 Smart Compiler 符号表
- 【开源】司马编译器 Smart Compiler
- 开源供应链之二 -- 程序结构
- .NET大型B2C开源项目nopcommerce解析——项目结构
- 开源纯C#工控网关+组态软件(八)表达式编译器
- F#的编译器及标准库使用Apache 2.0协议开源(暂时还没有看到未来)
- ucc 开源编译器 C语言
- 强大的开源编译器:GCC 4.3.2发布
- LCC编译器的源程序分析(64)符号表的结构注释
- 淘宝开源Key/Value结构数据存储系统Tair技术剖析
- 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释
- 【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式
- Java 对象在堆中的内存结构 -- 斯坦福大学编译器讲座笔记
- LCC编译器的源程序分析(64)符号表的结构注释
- leaf开源服务器第一节-分析项目结构
- 应用SAAS结构技术的开源药店管理系统-源代码结构说明
- 一个开源的IoC采集服务器体系结构设计
- 一个开源的IoC采集服务器体系结构设计
- 一个开源的IoC采集服务器体系结构设计
- 应用SAAS结构技术的开源药店管理系统-如何自己部署这种SOA/SAAS结构的应用