2.1 Cb语言的概要
删除了以下功能
- 预处理器
- 浮点数
- K&R语法
- enum
- struct的bit field
- struct和union的赋值
- struct和union的返回值
- 逗号表达式
- const
- volatile
- auto
- register
import
用import 关键字替代了#include(没有预处理器)
import stdio;
int main(int argc, char **argv)
{
printf("Hello, World!
");
return 0;
}
这里import实际上导入了导入文件.hb,导入文件中只能包括以下信息
- 函数声明 extern FILE* fopen(char* patch);
- 变量声明(不能初始化) extern int x;
- 常量定义(必须初始化)
- 结构体定义
- 联合体定义
- typedef: typedef unsigned long FILE;
- 其他import
2.2 cbc构成
代码树
- net.loveruby.cflat.asm: 汇编对象
- net.loveruby.cflat.ast: AST
- net.loveruby.cflat.compiler: 编译器核心
- net.loveruby.cflat.entity: 函数和变量等实体
- net.loveruby.cflat.exception: exception
- net.loveruby.cflat.ir: IR
- net.loveruby.cflat.parser: Parser
- net.loveruby.cflat.sysdep: 包含依赖于OS的代码的类(汇编器和链接器)
- net.loveruby.cflat.sysdep.x86: 包含依赖于OS和CPU的代码的类(代码生成器)
- net.loveruby.cflat.type: 表示Cb的类型的类
- net.loveruby.cflat.utils: 工具类
net.loveruby.cflat.compiler.Compiler的重要方法
- main
- build
- compile
- parseFile
- semanticAnalysis
- IRGenerator
- generateAssembly - assemble
- link