# JatCC-online
基于C语言并通过自举实现的在线编译系统,编译器前后端合一采用单趟(one-pass)解析,生成的目标代码基于自定义的虚拟机。该C语言在线编译系统经过webbench压力测试可以实现近万的QPS。
## 功能
* 一个能够自举在线的C编译器,受[c4](https://github.com/rswier/c4)的启发;
* 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型;
* 利用正则与状态机解析HTTP请求报文,实现处理静态资源的请求;
* 利用单例模式与阻塞队列实现异步的日志系统,记录服务器运行状态;
## 编译器特性
* 前后端合一,无中间优化;
* 目标代码基于自定义的虚拟机(VM),采用单趟(One-Pass)解析过程:源代码经过解析和代码生成过程直接生成虚拟机指令,然后由虚拟机来执行
* 可以使用GCC或者MSVC来编译,支持32位或者64位
`jatcc.c`(仅仅是c4的重构)支持的C语言特性:
- 基本类型:`char`,`int`,指针,匿名`enum`
- 控制流:`if-else`,`while`
- 运算符:`, = ?: || && | ^ & == != < > <= >= << >> + - * / % ++ -- [] ()`
- 函数定义
- 支持全局变量和局部变量声明。
- 支持使用指针进行的一切操作。
- 支持前向声明。
- 按照 `sizeof(int)` 字节对齐。
`jatccex.c`添加的扩展:
- 控制流:完美支持 `for` `do while` `break` `continue` `goto`
- 命名`enum`支持,简单等同于`int`
- 有限地支持了`union`和`struct`的核心特性,添加运算符`. ->`
jatcc.c作为基础版本不再改动。
## 实现细节
- [jatcc.c的实现细节与学习笔记](./code/compiler/jatcc.md)
## 环境要求
* Linux
* C++14
* 服务器程序运行端口默认使用1316,运行前请查看是否占用该端口
## 项目启动
```bash
make
./bin/server
```
## Webbench测试结果
```bash
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://192.168.220.128:1316/
7000 clients, running 10 sec.
Speed=611427 pages/min, 30136884 bytes/sec.
Requests: 100208 susceed, 0 failed.
```
## 致谢
《Linux高性能服务器编程》,游双著.
[@qinguoyi](https://github.com/qinguoyi/TinyWebServer):TinyWebServer开源项目
[@Robert Swierczek](https://github.com/rswier/c4):c4开源项目
[手把手教你构建 C 语言编译器](https://lotabout.me/2015/write-a-C-interpreter-0/)系列,[lotabout/write-a-C-interpreter](https://github.com/lotabout/write-a-C-interpreter)
更多关于C4以及实现一个C编译器相关的细节:[知乎-RednaxelaFX关于C4的文章](https://www.zhihu.com/question/28249756/answer/84307453)
## TODO
- float & double ? 虚拟机没有实现浮点指令,需要扩展指令集,现有框架能否完整且良好地支持还不好说,暂不实现。
没有合适的资源?快使用搜索试试~ 我知道了~
基于C语言并通过自举实现的在线编译系统,编译器前后端合一采用单趟(one-pass)解析,生成的目标代码基于自定义的虚拟机
共79个文件
html:11个
h:11个
cpp:9个
需积分: 1 0 下载量 34 浏览量
2024-03-11
13:03:52
上传
评论
收藏 40.05MB ZIP 举报
温馨提示
基于C语言并通过自举实现的在线编译系统,编译器前后端合一采用单趟(one-pass)解析,生成的目标代码基于自定义的虚拟机。该C语言在线编译系统经过webbench压力测试可以实现近万的QPS。.zip 【无积分此资源可私信博主有偿获取】 适合学习/练手、毕业设计、课程设计、期末/期中/大作业、工程实训、相关项目/竞赛学习等。 项目具有较高的学习借鉴价值,也可直接拿来修改复现。可以在这些基础上学习借鉴进行修改和扩展,实现其它功能。 可放心下载学习借鉴,你会有所收获。 —— 【无积分此资源可私信博主有偿获取】 对于学习和实践,选择合适的项目和资源确实是一种有效的方式。 在进行毕业设计、课程设计或大作业时,选择具备学习借鉴价值的项目可以帮助你理解和应用所学知识,同时也可以通过修改和扩展来实现其他功能。 通过参与实际项目,你可以应用所学的理论知识,深入了解软件开发或其他领域的实践流程和技术要求。 可放心下载学习借鉴,你会有所收获。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。2. 部分字体以及插图等来自网络,若是侵权请联系删除。
资源推荐
资源详情
资源评论
收起资源包目录
基于C语言并通过自举实现的在线编译系统,编译器前后端合一采用单趟(one-pass)解析,生成的目标代码基于自定义的虚拟机。该C语言在线编译系统经过webbench压力测试可以实现近万的QPS。.zip (79个子文件)
archie_c1
resources
register.html 3KB
welcome.html 3KB
helper.html 3KB
403.html 3KB
js
.DS_Store 6KB
bootstrap.min.js 36KB
jquery.magnific-popup.min.js 20KB
magnific-popup-options.js 1KB
smoothscroll.js 4KB
wow.min.js 7KB
custom.js 1KB
jquery.js 84KB
css
style.css 10KB
.DS_Store 6KB
bootstrap.min.css 118KB
magnific-popup.css 7KB
animate.css 74KB
font-awesome.min.css 27KB
404.html 3KB
index.html 3KB
405.html 3KB
ret.txt 0B
error.html 3KB
images
.DS_Store 6KB
profile-image.jpg 46KB
favicon.ico 60KB
compiled.html 3KB
400.html 3KB
video
xxx.mp4 37.83MB
compile.html 3KB
fonts
.DS_Store 6KB
FontAwesome.otf 107KB
fontawesome-webfont.eot 69KB
fontawesome-webfont.woff 82KB
fontawesome-webfont.woff2 65KB
fontawesome-webfont.svg 358KB
fontawesome-webfont.ttf 139KB
Makefile 36B
LICENSE 11KB
bin
jatcc.o 100KB
server 4.51MB
build
Makefile 466B
webbench-1.5
Makefile 1KB
webbench.c 11KB
webbench.o 67KB
webbench 49KB
socket.c 2KB
README.md 3KB
code
pool
threadpool.h 3KB
README.md 280B
timer
heaptimer.cpp 5KB
heaptimer.h 2KB
README.md 368B
main.cpp 383B
http
httprequest.h 3KB
httprequest.cpp 7KB
httpconn.h 2KB
httpresponse.h 2KB
httpconn.cpp 4KB
httpresponse.cpp 6KB
README.md 331B
server
epoller.cpp 1KB
webserver.h 2KB
epoller.h 952B
webserver.cpp 9KB
log
log.h 2KB
2024_02_04.log 2KB
blockqueue.h 4KB
log.cpp 7KB
README.md 344B
compiler
jatcc.c 34KB
testjatc.c 243B
jatccOrigin.c 27KB
jatcc.md 19KB
hello.c 78B
jatcc.h 2KB
buffer
buffer.cpp 6KB
buffer.h 2KB
README.md 442B
共 79 条
- 1
资源评论
阿齐Archie
- 粉丝: 1w+
- 资源: 2303
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功