• 自制编译器 青木峰郎 笔记 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!
    ");
        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
  • 相关阅读:
    练手
    课余时间娱乐下
    2017-2-19,作业
    JavaScript(下)
    JavaScript(上)
    Day15:网络编程-HTTP
    小知识:静态导入
    多线程知识点:锁
    多线程知识点:同步
    Day16:反射技术
  • 原文地址:https://www.cnblogs.com/xuesu/p/14376265.html
Copyright © 2020-2023  润新知