{"id":13667576,"url":"https://github.com/Komorebi660/SysYF-Compiler","last_synced_at":"2025-04-26T16:30:35.085Z","repository":{"id":41375723,"uuid":"450495023","full_name":"Komorebi660/SysYF-Compiler","owner":"Komorebi660","description":"2021年中国科学技术大学编译原理(H)课程实验项目","archived":false,"fork":false,"pushed_at":"2023-08-25T10:09:54.000Z","size":1951,"stargazers_count":24,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-11T02:38:35.707Z","etag":null,"topics":["compiler","cpp","ustc"],"latest_commit_sha":null,"homepage":"","language":"LLVM","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Komorebi660.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-01-21T13:08:41.000Z","updated_at":"2024-11-03T02:56:18.000Z","dependencies_parsed_at":"2024-01-14T16:14:30.306Z","dependency_job_id":null,"html_url":"https://github.com/Komorebi660/SysYF-Compiler","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Komorebi660%2FSysYF-Compiler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Komorebi660%2FSysYF-Compiler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Komorebi660%2FSysYF-Compiler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Komorebi660%2FSysYF-Compiler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Komorebi660","download_url":"https://codeload.github.com/Komorebi660/SysYF-Compiler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251017148,"owners_count":21523525,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","cpp","ustc"],"created_at":"2024-08-02T07:00:41.075Z","updated_at":"2025-04-26T16:30:30.618Z","avatar_url":"https://github.com/Komorebi660.png","language":"LLVM","readme":"\n# SysYF编译器\n\n`SysYF`语言是在`2020`、`2021`年全国大学生计算机系统能力大赛编译系统设计赛要求实现的`SysY`语言基础上增加了`float`类型和元素类型为`float`的数组类型。本仓库是**2021年中国科学技术大学编译原理H**课程的实验项目。\n\n## 目录结构\n\n```\n.\n├── CMakeLists.txt\n├── README.md\n├── doc/                          #实验文档\n│   ├── AST.md                    #语法树说明\n│   ├── DeadCodeEli.pdf      \n│   ├── Dominance.pdf        \n│   ├── SysYFIR.md                #IR接口说明\n│   └── SysYF语言定义.pdf\n├── grammar/                      #词法和语法文件\n│   ├── SysYFParser.yy\n│   └── SysYFScanner.ll\n├── include/                      #头文件\n├── lib/\n├── report/                       #实验报告\n├── src                           #源代码\n│   ├── ASTBuilder/\n│   ├── ASTPrinter/\n│   ├── Checker/                  #类型检查\n│   ├── ErrorReporter/\n│   ├── Frontend/\n│   ├── Optimize/                 #优化算法\n│   ├── SysYFIR/                  #IR构建\n│   ├── SysYFIRBuilder/\n│   └── main.cpp\n└── test                          #测试集\n    ├── test.py                   #测试脚本\n    ├── test_2020/                #2020编译比赛测试集\n    └── test_2021/                #2021编译比赛测试集\n        \n```\n\n## 实验环境\n\n- Ubuntu 20.04.6 LTS\n- gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) \n- GNU Make 4.2.1\n- cmake 3.16.3\n- flex 2.6.4\n- bison 3.7.6\n- clang 10.0.0-4ubuntu1 \n- LLVM version 10.0.0\n\n### 环境构建\n\n实验框架搭建需要`flex`、`bison`(`3.7.6`及以上)、`clang`、`llvm`等工具，下面以`Ubuntu`为例安装上述工具:\n\n```\nsudo apt install flex\n\nwget http://ftp.gnu.org/gnu/bison/bison-3.7.6.tar.gz\ntar xvzf bison-3.7.6.tar.gz\ncd bison-3.7.6\nsudo ./configure\nsudo make\nsudo make install\n\nsudo apt install clang\nsudo apt install llvm\n```\n\n检查安装是否成功:\n\n```\nwhich flex\nwhich bison\nwhich clang\nwhich lli\n```\n\n若能依次输出安装位置，则表明安装成功。\n\n## 编译运行\n\n在搭建好环境后，便可以开始编译`SysYF`编译器了，编译需要`cmake`及`make`工具链。在顶层目录下输入：\n\n```\nmkdir build\ncd build\ncmake ..\nmake\n```\n\n即可完成编译，在`build`目录下会出现可执行文件`compiler`.\n\n你可以通过如下方式运行编译器:\n\n```\n./compiler [.sy文件路径] [参数] -o [生成文件路径]\n```\n\n参数主要如下：\n\n- **-h** 或 **--help**: 打印提示信息\n- **-p** 或 **--trace_parsing**: 打印文法扫描过程\n- **-s** 或 **--trace_scanning**: 打印词法扫描过程\n- **-emit-ast**: 从语法树复原代码\n- **-emit-ir**: 生成IR\n- **-check**: 类型检查\n- **-O**: 将IR转化为SSA格式\n- **-O -cse**: 开启公共子表达式删除优化\n- **-O -cp**: 开启常量传播优化\n- **-O -dce**: 开启死代码删除优化\n- **-O2**: 开启全部优化\n\n例如:\n\n```\n./compiler test.sy -emit-ir -O -cse -o test.ll\n```\n\n表示对`test.sy`分析，生成`IR`并执行`公共子表达式删除`优化，结果保存在`test.ll`文件中。\n\n## 测试\n\n仓库提供了编译大赛的测试样例以及python测试脚本，位于test目录下，在终端中输入:\n\n```\npython test.py\n```\n\n即可自动运行`test_2020`及`test_2021`下的测试点，本仓库的编译器能通过全部的测试点。\n\n你还可以修改`python`脚本，添加测试目录以及更改编译选项。\n","funding_links":[],"categories":["LLVM"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKomorebi660%2FSysYF-Compiler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKomorebi660%2FSysYF-Compiler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKomorebi660%2FSysYF-Compiler/lists"}