chibi-scheme源代码分析之零--总体结构
2012-01-12 22:46
471 查看
chibi-scheme是一个scheme语言的实现(编译器).代码很优雅,又不太长,包括了编译原理的完整概念,非常值得学习.
当前源代码为chibi-scheme-0.5.3版本.
项目的地址在http://code.google.com/p/chibi-scheme/
在线手册可以在这里看到http://synthcode.com/scheme/chibi/
./include/chibi/sexp.h--包含了s表达式的定义,整个系统的头文件
./gc.c--实现了系统的内存分配及垃圾回收工作
./sexp.c--语法分析及操作s表达式的一些函数
./eval.c--从抽象语言法树到虚拟机字节码生成过程都在这个文件实现
./vm.c--虚拟机
本篇的整个系列随笔就按上面几个文件的次序分析的.
其它一些不重要的源文件包括main.c opcode.c等等.
其主要目的是用于C语言的扩展和脚本,可以嵌入到C程序中.这不是一个解释器,而是编译生成字节码在虚拟机中运行.
具体的几篇会分析
类型系统
垃圾回收机制
词法分析
ast生成和bytecode生成
虚拟机
这些构成了chibi-scheme的一个核,相当于有了一个自举的编译器,接着通过模块系统实现了很多扩展和库函数,最终形成一个完整的编译器.
由于有些依赖关系,为了不至于读到后面的某个函数常常要回头查看前面的代码,建议的阅读顺序是sexp.h => gc.c => sexp.c => eval.c => vm.c
本源代码分析系列正是按此顺序进行的.
当前源代码为chibi-scheme-0.5.3版本.
项目的地址在http://code.google.com/p/chibi-scheme/
在线手册可以在这里看到http://synthcode.com/scheme/chibi/
主要源文件
最主要的几个文件是./include/chibi/sexp.h--包含了s表达式的定义,整个系统的头文件
./gc.c--实现了系统的内存分配及垃圾回收工作
./sexp.c--语法分析及操作s表达式的一些函数
./eval.c--从抽象语言法树到虚拟机字节码生成过程都在这个文件实现
./vm.c--虚拟机
本篇的整个系列随笔就按上面几个文件的次序分析的.
其它一些不重要的源文件包括main.c opcode.c等等.
总体结构
这一系列的分析只包含核心部分.chibi-scheme目前正在迅速发展中,完全支持R7RS的small版本.包括动态链接库和C语言函数外部调用接口(FFI).其主要目的是用于C语言的扩展和脚本,可以嵌入到C程序中.这不是一个解释器,而是编译生成字节码在虚拟机中运行.
具体的几篇会分析
类型系统
垃圾回收机制
词法分析
ast生成和bytecode生成
虚拟机
这些构成了chibi-scheme的一个核,相当于有了一个自举的编译器,接着通过模块系统实现了很多扩展和库函数,最终形成一个完整的编译器.
由于有些依赖关系,为了不至于读到后面的某个函数常常要回头查看前面的代码,建议的阅读顺序是sexp.h => gc.c => sexp.c => eval.c => vm.c
本源代码分析系列正是按此顺序进行的.
相关文章推荐
- Hayden Luo BIOS 总体结构及部分源代码分析
- LAV Filter 源代码分析 1: 总体结构
- OpenLayers 项目分析(二)源代码总体结构分析
- LAV Filter 源代码分析 1: 总体结构
- chibi-scheme源代码分析之一--类型系统
- chibi-scheme源代码分析之三--编译原理
- OpenLayers 项目完整分析(二)源代码总体结构分析
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(二):源代码总体结构分析
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(二):源代码总体结构分析
- LAV Filter 源代码分析 1: 总体结构
- OpenLayers 项目完整分析——(二)源代码总体结构分析
- OpenLayers-------源代码总体结构分析
- OpenLayers 项目完整分析——(二)源代码总体结构分析
- OpenLayers-------源代码总体结构分析
- [转载]OpenLayers 项目分析——(二)源代码总体结构分析{感谢原作者对于大家的贡献!}
- OpenLayers 项目分析[转](二):源代码总体结构分析
- OpenLayers 项目分析——(二)源代码总体结构分析{感谢原作者对于大家的贡献!}
- FFmpeg源代码结构图 - 雷神经典代码分析
- Django源代码阅读分析-2:持久层结构分析
- GNUGK(2.2.3)源代码分析之线程池结构