zoukankan      html  css  js  c++  java
  • 自制编译器 青木峰郎 笔记 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
  • 相关阅读:
    FPGA基础学习(2) -- FIFO IP核(Quartus)
    FPGA中如何实现除法?
    GPIO初始化之PB3/PB4/PA13/PA14/PA15引脚的复用--寄存器版本
    图像处理实际应用启发
    霍夫变换(hough transform)
    傅里叶变换讲解
    模拟电路学习入门的建议(综合整理)
    低噪声APD偏置电路
    如何安装altium designer 10
    后仿真
  • 原文地址:https://www.cnblogs.com/xuesu/p/14376265.html
Copyright © 2011-2022 走看看