文件名称:9cc:小型C编译器
文件大小:33KB
文件格式:ZIP
更新时间:2024-04-20 21:57:24
C
9cc C编译器 注意:9cc不再是一个活动项目,后继者是 。 9cc是我的 C编译器的后继产品。 在这个新项目中,我正在尝试编写易于生成的代码,这些代码在创建可生成合理有效汇编的编译器时非常容易理解。 9cc比8cc具有更多的阶段。 以下是内部结构的概述: 将输入字符串编译为抽象语法树。 在树上运行语义分析器,以将类型添加到每个树节点。 将树转换为中间代码(IR),在某种程度上类似于x86-64指令,但具有无限数量的寄存器。 将无限数量的寄存器映射到有限数量的寄存器。 从IR生成x86-64指令。 为了使代码尽可能简单,我做出了一些重要的设计选择: 与8cc一样,没有内存管理是9cc中的内存管理策略。 我们使用malloc()分配内存,但从不调用free()。 我知道人们发现该策略很奇怪,但这实际上是短期程序(例如编译器)的合理设计选择。 该策略极大地简化了代码,并且完
【文件预览】:
9cc-master
----token.c(10KB)
----irdump.c(4KB)
----regalloc.c(5KB)
----opt.c(1KB)
----.clang-format(63B)
----util_test.c(2KB)
----examples()
--------nqueen.c(1007B)
----util.c(4KB)
----9cc.h(7KB)
----LICENSE(1KB)
----test()
--------token.c(167B)
--------test.c(8KB)
--------gcc.c(59B)
--------test2.inc(37B)
--------test1.inc(77B)
----liveness.c(2KB)
----gen_ir.c(10KB)
----README.md(2KB)
----Makefile(490B)
----sema.c(6KB)
----preprocess.c(6KB)
----parse.c(20KB)
----.gitignore(22B)
----gen_x86.c(6KB)
----main.c(879B)