Skip to content

QQYYHH/qcc

Repository files navigation

qcc

这可能是一个支持c11的编译器,从0开始写,最终能够做到自己编译自己 参考 8cc https://github.com/rui314/8cc/commits/master?before=b480958396f159d3794f0d4883172b21438a8597+766&branch=master

TODO

  • 加减乘除混合运算
  • support brackets ( )
  • 变量赋值语句
  • add function call
  • add char
  • abstract part of code as lexer
  • add declaration
  • add type checking
  • add pointer, unary operator
  • pointer arithmetic
  • add array
  • array arithmetic
  • support multi-array
  • distinguish global/local vars
  • split main into parser.c and gen.c
  • add list structure
  • add bool and compare calculation such as <, > and == , it's easy to extend to >= and <=
  • add ++, --
  • add if
  • add for
  • add func definition and return
  • support negative number
  • support structure
  • support include C header

issue

  • 没有测试 局部变量和全局变量运算及其赋值
  • x = a++, x = ++a 这两种情况的区分,++运算符的优先级问题

bug fix

  • 赋值语句中 = 的优先级比较特殊,对于连续的=,前面的优先级 < 后面;对于+ - * / 来说,相同符号前面的优先级 > 后面
  • a[1] = 1 这种赋值方式已经支持
  • 支持 使用表达式定义数组大小
  • 修复多维数组初始化赋值的bug: a[2][3] = {0, 1, 2, 3,4 ,5}
  • 在对 函数定义抽象语法树 产生代码的过程中,要注意将寄存器压栈,相当于是将实际参数压栈(调用前会将实参传入相应寄存器中)
  • 如果函数定义中的形参是数组类型,则将其转换为指针类型

insight

解析数组元素分成两个核心步骤,比如a[2],解析为*(a + 2):

  • 指针运算
  • 解引用

About

QQYYHH Complier for C11

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published