# tiny-C-Compiler
简化版`C`语言编译器,编译系统。
# 简介(Introduction)
`JCC`是一个`C`语言的编译系统,包括编译器(`compiler`)、汇编器(`assembler`)和链接器(`linker`)。最后可以产生`x86-elf`格式的可执行文件。`JCC`的含义是`Just Compiler Compiler`。
<img src="document/src/demo.png" alt="demo" style="zoom:67%;" />
# How to compile
```bash
./run.sh
```
在`DOS`下执行编译脚本,能够产生对应的二进制文件,其中用到的`make`工具已经放置在`make_tool`中。若您对代码二次修改,同样可以执行上述命令,这样可以更新`JCC`。
编译源文件步骤,使用如下命令:
```bash
jcc.exe jcc src1 src2 ... [-option]
```
其中`src1`、`src2`等是一系列的源文件,最后是编译选项,选择不同的编译选项,可以得到不同的目标文件。
```bash
-c # 将源文件编译为汇编文件
-s # 将汇编文件汇编为目标文件
-l [output] # 链接多个目标文件,输出可执行文件,其中输出文件名可选,默认值为a.out
-o [output] # 将源文件一步编译为可执行文件,其中输出文件名可选,默认值为a.out
```
# 环境(Environment)
```bash
OS: windows 10/11
g++:(x86_64-posix-seh-rev0, Built by MinGW-W64 project) 5.4.0
# 注意,由于用到了一些C++11的语法特性,要求gcc版本不能过低,至少要支持c++11
# 主要有冲突的部分是unordered_map这一数据类型,如果编译器不支持,请修改对应的容器为hash_map
running env: linux(Ubuntu-i386)
# 由于产生的目标文件是elf(32bit),因此最后在上述虚拟机中测试
```
附:[虚拟机镜像地址](http://releases.ubuntu.com/16.04/)
# 细节(Detail)
参见`document`。
# Demo
在文本编辑器中输入以下`C`语言的代码,这是一段求斐波那契数列的例子。
```c
int Fibonacci(int k){
if(k == 1 || k == 0){
return 1;
}else{
return Fibonacci(k - 1) + Fibonacci(k - 2);
}
}
int main(){
for(int i=1;i<20;i=i+1){
out << "fib(" + i + "):" + Fibonacci(i) + "\n";
}
return 0;
}
```
在命令行中,输入以下命令:
```bash
jcc.exe jcc ./demo/test.tc -o ./demo/fib.out
```
<img src="document/src/demo1.png" alt="demo1" style="zoom:67%;" />
执行完成之后,屏幕显示成功输出文件`fib.out`。
把二进制文件`fib.out`放到虚拟机中,执行。
```bash
chmod 777 ./test_dir2/fib.out
./fib.out
```
最后运行结果:
<img src="document/src/demo2.png" alt="demo2" style="zoom:67%;" />
# END
更新中,目前支持与不支持的语法:
- [ ] `struct`
- [ ] `*`(`pointer`)
- [ ] `i += 1` `i -= 1` ...
- [ ] `i++` `i--`
- [ ] `enum`
- [ ] `do-while`
- [x] `while`
- [x] `for`
- [x] `if-else`
- [x] `condition`
- [x] `&&` `||`
- [x] `switch-case`
```bash
i++; # 暂时不支持自增和自减
i += 1 # 暂不支持所有的这类表达式
```
当然更加复杂的C语言结构也暂时不支持,例如结构体`struct`、指针以及一些`enum`关键字,上述不支持的语法,部分在后续可以得到完善。具体支持的语法特性见`document`。
没有合适的资源?快使用搜索试试~ 我知道了~
C语言编译器,编译系统.zip
共93个文件
drawio:17个
h:16个
cpp:15个
需积分: 1 0 下载量 91 浏览量
2024-02-28
17:44:51
上传
评论
收藏 3.94MB ZIP 举报
温馨提示
C语言编译器,编译系统.zip
资源推荐
资源详情
资源评论
收起资源包目录
C语言编译器,编译系统.zip (93个子文件)
tiny-C-Compiler-main
Linker
Linker.sln 1KB
Link.h 1KB
Common.h 1KB
make.bat 48B
Makefile 385B
main.cpp 914B
elf.h 112KB
Link.cpp 12KB
Elf_File.cpp 6KB
Elf_File.h 1KB
make.bat 47B
Makefile 322B
Compiler
Generator.h 3KB
Common.h 4KB
compiler_test
test.tc 116B
test9.s 216B
test8.s 12KB
test1.tc 149B
test9.tc 126B
test7.tc 124B
test1.s 2KB
test2.tc 401B
test8.tc 488B
test5.tc 209B
test3.tc 191B
test4.tc 79B
test6.tc 132B
test.s 3KB
make.bat 48B
Compiler.sln 1KB
Parser.h 2KB
Makefile 426B
Parser.cpp 33KB
main.cpp 517B
Generator.cpp 25KB
Lexer.h 2KB
Semantic.cpp 13KB
Semantic.h 2KB
Lexer.cpp 10KB
common.s 41B
main.cpp 6KB
make_tool
make.exe 91KB
README.md 29B
run.bat 311B
test
test.s.t 0B
test.tc 222B
common.s 691B
common.s.t 120B
test.s 7KB
.gitignore 407B
Assembler
Common.h 3KB
make.bat 48B
ass_test
test.s.t 677B
common.s 691B
common.s.t 120B
test.s 3KB
Parser.h 895B
Makefile 456B
Generate.cpp 8KB
Parser.cpp 9KB
main.cpp 588B
elf.h 112KB
Lexer.h 2KB
Semantic.cpp 5KB
Semantic.h 2KB
Generate.h 2KB
Lexer.cpp 6KB
Elf_File.cpp 10KB
Assembler.sln 1KB
Elf_File.h 2KB
document
src
for_loop.drawio 948B
NFA.drawio 2KB
指令.drawio 2KB
epsilon-question.drawio 1KB
as-递归下降.drawio 3KB
demo2.png 65KB
Right-Linear-G.drawio 1016B
FA-demo.drawio 2KB
FA.drawio 2KB
demo1.png 59KB
FIRST.drawio 2KB
RE-NFA.drawio 2KB
注释识别.drawio 2KB
CFG.drawio 5KB
RE-NFA-demo.drawio 6KB
demo.png 36KB
CFG-design.drawio 3KB
DFA.drawio 2KB
递归下降.drawio 5KB
LSMP.drawio 2KB
JCC-document.pdf 3.91MB
README.md 64B
README.md 3KB
共 93 条
- 1
资源评论
日刷百题
- 粉丝: 5291
- 资源: 951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功