在CParser的基础上,改进一些功能。
使用C++14,以及CMake使代码可以跨平台编译(因此舍弃VS)。
更改了CParser项目中的诸多bug。
本项目中的Lexer由我自己编写,参考了CEval中的部分代码。Parser和VM暂时是使用write-a-C-interpreter项目中的代码,自举文件xc.txt也是。
特性:
- 手动LL分析
- 生成抽象语法树(结点扁平化、POD,结点由内存池提供,无需考虑析构、引用计数、结点多态等问题,内存池由自己实现)
- 根据AST生成指令(带简单的静态类型分析)
- 虚拟机中的任意地址由VMM(软件实现虚页机制)提供转换,与物理内存隔离
- 虚拟机中的MALLOC指令由软件实现(用内存池)
后期:
- 改善虚拟机指令,使之与VMM兼容
- 改善自举代码
- 解析C文件(完成)
- 生成抽象语法树(完成)
- 生成指令(完成)
- 建立虚拟机(待优化)
- 词法分析(LL手写识别,比regex库高效)
- 识别数字(科学计数+十六进制)
- 识别变量名
- 识别空白字符
- 识别字符(支持所有转义)
- 识别字符串(支持所有转义)
- 识别注释
- 识别关键字
- 识别操作符
- 错误处理(快速失败)
- 语法分析并生成AST
- 识别函数
- 识别枚举
- 识别表达式
- 识别基本结构
- 生成AST(完成AST打印功能)
- 语义分析并生成中间代码
- 语义分析
- 生成代码(针对多数AST,完成)
- 虚拟机
- 实现虚页(已实现,分代码段,数据段,栈,堆)
- 实现MALLOC(已实现,参考CLib::memory.h)
- 统一系统调用(计划中)
- 构建标准库(常用数据结构,计划中)
先用CMake进行编译,然后操作:CMiniLang xc.txt xc.txt test.txt
,注意文件在code文件夹中。