Skip to content

zero c compiler,一个从零开始写的编译器,不仅仅为了学习编译原理

License

Notifications You must be signed in to change notification settings

strugglebak/zcc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

zcc

以下是该项目的总结文章

zero c compiler,一个从零开始写的编译器,不仅仅为了学习编译原理

命名规范如下

  • 类型大写首字母驼峰
  • 变量和函数名小写下划线
  • 常量大写下划线
  • 驼峰和下划线不混用

优势

由于是用 c 写的编译 c 代码的编译器,项目中并 没有采用任何第三方的 .so 动态链接库或者是 .a 静态链接库,有也只是用了标准库里面的函数,所以基本遵从 "从零开始写" 这一原则

Features

  • 支持 基本的汇编代码生成
  • 支持 全局/局部 变量解析
  • 支持 if/while/for/switch 语句的解析
  • 支持 struct/union/sizeof/static/extern 等关键字声明的语句的解析
  • 支持 全局/局部 的 数组/指针 变量的赋值与被赋值
  • 支持 函数声明/定义
  • 支持 函数参数的解析
  • 支持 部分不带括号的 return 语句
  • 支持 打印 AST
  • 支持 first time 自举编译

用法和调试

git clone git@github.com:strugglebak/zcc.git
cd zcc
# 先安装 build 依赖
sudo apt-get install build-essential
# make install 需要权限
make clean && make install

./parser your_c_code.zc

测试

make clean && make test

Roadmaps

  • 完善 ARM 后端相关汇编代码生成
  • 完善 BNF 语法(这里可能会使用一些 ``BNF` 工具来做)
  • 支持 ... token 的解析,用来检查函数的实参和形参个数
  • 支持 short 类型解析
  • 优化寄存器分配策略
  • 优化 AST 结构
  • 汇编代码生成优化
  • 增加 Debugging 输出
  • 支持在其他平台运行编译器

协议

MIT

About

zero c compiler,一个从零开始写的编译器,不仅仅为了学习编译原理

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published