自制编译器 青木峰郎 笔记 Ch2 Cb和Cbc

2.1 Cb语言的概要

删除了以下功能

  1. 预处理器
  2. 浮点数
  3. K&R语法
  4. enum
  5. struct的bit field
  6. struct和union的赋值
  7. struct和union的返回值
  8. 逗号表达式
  9. const
  10. volatile
  11. auto
  12. register

import

用import 关键字替代了#include(没有预处理器)

import stdio;

int main(int argc, char **argv)
{
    printf("Hello, World!\n");
    return 0;
}

这里import实际上导入了导入文件.hb,导入文件中只能包括以下信息

  1. 函数声明 extern FILE* fopen(char* patch);
  2. 变量声明(不能初始化) extern int x;
  3. 常量定义(必须初始化)
  4. 结构体定义
  5. 联合体定义
  6. typedef: typedef unsigned long FILE;
  7. 其他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
posted @ 2021-02-05 10:16  雪溯  阅读(316)  评论(0编辑  收藏  举报