# sv-JTracing(Online)
| **中文** | [English](readme_en.md) |
[![GitHubStars](https://img.shields.io/github/stars/AllwenWeill/sv-JTracing_Online?logo=GitHub)](https://github.com/AllwenWeill/sv-JTracing_Online/stargazers)
[![GitHub pull-requests](https://img.shields.io/github/issues-pr/AllwenWeill/sv-JTracing_Online.svg)](https://github.com/AllwenWeill/sv-JTracing_Online/pulls)
[![GitHub LICENSE](https://img.shields.io/github/license/AllwenWeill/sv-JTracing_Online.svg)](https://github.com/AllwenWeill/sv-JTracing_Online/blob/master/LICENSE)
[![GitHub contributors](https://img.shields.io/github/contributors/AllwenWeill/sv-JTracing_Online.svg)](https://github.com/AllwenWeill/sv-JTracing_Online/graphs/contributors)
利用C++实现针对SystemVerilog的高性能在线编译系统,可将SystemVerilog源代码进行高鲁棒性的词法解析和常见语法分析和部分语义分析,生成可靠Abstract Syntax Tree,并提供Parser解析过程信息、报错信息和变量表,该在线编译系统通过webbenchh压力测试可以实现近万的QPS
## 功能
* 利用逐字符扫描SystemVerilog源代码进行高鲁棒性词法分析,稳定生成对应Token;
* 利用递归下降法手工构建语法分析器,实现SystemVerilog常见语法检查,生成分析结果并输出可靠抽象语法树;
* 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型;
* 利用状态机解析HTTP请求报文并转义url字符编码,实现分析与处理静态资源的请求;
## Demo演示
----------
> * __在线编译系统整体视频演示__
<div align=center><img src="https://github.com/AllwenWeill/IMG/blob/main/video_show.gif" height="429"/> </div>
> * __样例1-module__
```bash
module m;
// hello
bit [4:0] b;
int b; //注意:此处有重命名错误
begin end
endmodule
```
![image](https://github.com/AllwenWeill/IMG/blob/main/vedio_medule.gif)
> * __样例2-for__
```bash
int a = 0;
for (int i = 0; i <= 5; i++) begin
a = a + 1;
end
```
![image](https://github.com/AllwenWeill/IMG/blob/main/video_for.gif)
> *__样例2中SystemVerilog代码整体AST抽象语法树结构展示:__
![image](https://github.com/AllwenWeill/IMG/blob/main/AST_whole.png)
> *__其中for循环内AST抽象语法树完整展示:__
![image](https://github.com/AllwenWeill/IMG/blob/main/AST_for.png)
## 环境要求
* Linux环境
* C++17
* 服务器程序运行端口默认使用4466,运行前请查看是否占用该端口
## 版本迭代
.__HTTP请求解析__:
初代版本http请求解析方法非常笨拙,通过固定范围位区间对应的含义,通过逐字符扫描进行解析
.---->更新:利用正则运算和有限状态机解析HTTP请求报文
.__SystemVerilog代码编译结果回传__:
初代版本识别到“编译按钮”后,将修改响应报文content-type为text/plain,然后将编译结果生成string字符串添加到响应体内回传给浏览器
.---->_更新_:将SystemVerilog代码编译结果写入resource目录中的.txt文本中,然后浏览器端请求该.txt资源并获取其文本内容,因为是对同一文件写入再清除,该文件则为临界资源,本server程序在业务处理时采用多线程方式为对该临界资源造成读写错误,则采用加互斥量来保证原子性
.---->_更新_:由于server程序在高并发状态时采用互斥锁会明显抑制整体程序的效率,因此采用将每个线程随机生成文件并写入的方式,在线程执行结束后将该文件删除,核心思想是利用空间换时间从而提高程序效率。(但目前问题是该线程创建的.txt文件如何让浏览器知道去请求哪个.txt文件资源?)
## 项目启动
```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.48.128:4466/
7000 clients, running 5 sec.
Speed=132156 pages/min, 6923630 bytes/sec.
Requests: 11013 susceed, 0 failed.
```
## 致谢
[@Ruslan Spivak](https://github.com/rspivak/): Let's Build A Simple Interpreter
[@LLVM](https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html): My First Language Frontend with LLVM Tutorial
《Linux高性能服务器编程》,游双著.
[@qinguoyi](https://github.com/qinguoyi/TinyWebServer):TinyWebServer开源项目
[@MikePopoloski](https://github.com/MikePopoloski/slang):slang开源项目
没有合适的资源?快使用搜索试试~ 我知道了~
利用C++实现针对SystemVerilog的高性能在线编译系统
共68个文件
html:11个
jpg:10个
js:7个
需积分: 1 0 下载量 56 浏览量
2024-08-09
10:18:21
上传
评论
收藏 39.88MB ZIP 举报
温馨提示
利用C++实现针对SystemVerilog的高性能在线编译系统,可将SystemVerilog源代码进行高鲁棒性的词法解析和常见语法分析和部分语义分析,生成可靠Abstract Syntax Tree,并提供Parser解析过程信息、报错信息和变量表,该在线编译系统通过w….zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:项目具体内容可查看下方的资源详情,包含完整源码+工程文件+说明等(若有)。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
资源推荐
资源详情
资源评论
收起资源包目录
利用C++实现针对SystemVerilog的高性能在线编译系统,可将SystemVerilog源代码进行高鲁棒性的词法解析和常见语法分析和部分语义分析,生成可靠Abstract Syntax Tree,并提供Parser解析过程信息、报错信息和变量表,该在线编译系统通过w….zip (68个子文件)
DSCYM
resources
show.html 3KB
welcome.html 3KB
helper.html 3KB
403.html 469B
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 71KB
font-awesome.min.css 27KB
404.html 386B
index.html 3KB
405.html 414B
ret.txt 230B
error.html 3KB
images
.DS_Store 6KB
ast_whole.jpg 379KB
instagram-image4.jpg 101KB
ast_for.jpg 329KB
profile-image2.jpg 27KB
profile-image1.jpg 28KB
instagram-image5.jpg 48KB
instagram-image2.jpg 66KB
profile-image.jpg 13KB
instagram-image3.jpg 58KB
favicon.ico 12KB
vedio_medule.gif 866KB
instagram-image1.jpg 74KB
compiled.html 4KB
400.html 387B
video
xxx.mp4 37.83MB
compile.html 4KB
fonts
.DS_Store 6KB
FontAwesome.otf 107KB
fontawesome-webfont.eot 69KB
fontawesome-webfont.woff 82KB
fontawesome-webfont.woff2 65KB
fontawesome-webfont.svg 357KB
fontawesome-webfont.ttf 139KB
Makefile 37B
LICENSE 11KB
sv-JTracing
readme.md 4KB
build
Makefile 1KB
.gitmodules 100B
.gitignore 27B
readme_en.md 5KB
code
pool
threadpool.h 2KB
main.cpp 511B
http
httprequest.h 2KB
httprequest.cpp 7KB
httpconn.h 1KB
httpresponse.h 1KB
httpconn.cpp 3KB
httpresponse.cpp 5KB
server
epoller.cpp 1KB
webserver.h 1KB
epoller.h 756B
webserver.cpp 5KB
buffer
buffer.cpp 3KB
buffer.h 1KB
共 68 条
- 1
资源评论
热爱技术。
- 粉丝: 2449
- 资源: 7862
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功