Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DaviesGit/SysY_compiler
该编译器主要用来将SysY语言编译为arm汇编指令,并且对编译生成的代码进行优化。SysY 语言是 C 语言的一个子集。每个 SysY程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅有一个名为 main的主函数定义,还可以包含若干全局变量声明、常量声明和其他函数定义。SysY语言支持 int 类型和元素为 int 类型且按行优先存储的多维数组类型,其中 int 型整数为 32 位有符号数;const 修饰符用于声明常量。
https://github.com/DaviesGit/SysY_compiler
Last synced: 3 days ago
JSON representation
该编译器主要用来将SysY语言编译为arm汇编指令,并且对编译生成的代码进行优化。SysY 语言是 C 语言的一个子集。每个 SysY程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅有一个名为 main的主函数定义,还可以包含若干全局变量声明、常量声明和其他函数定义。SysY语言支持 int 类型和元素为 int 类型且按行优先存储的多维数组类型,其中 int 型整数为 32 位有符号数;const 修饰符用于声明常量。
- Host: GitHub
- URL: https://github.com/DaviesGit/SysY_compiler
- Owner: DaviesGit
- License: mit
- Created: 2020-09-02T05:56:57.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-27T12:08:51.000Z (over 2 years ago)
- Last Synced: 2024-08-02T07:02:06.352Z (3 months ago)
- Language: C++
- Homepage:
- Size: 3.51 MB
- Stars: 63
- Watchers: 3
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[![MIT License][license-shield]][license-url]
Maked by Davies
Email: [email protected]
## Table of Contents
* [About the Project](#about-the-project)
* [Built With](#built-with)
* [Getting Started](#getting-started)
* [Prerequisites](#prerequisites)
* [Installation](#installation)
* [Usage](#usage)
* [功能定制](#功能定制)
* [Roadmap](#roadmap)
* [Contributing](#contributing)
* [License](#license)
* [Contact](#contact)
* [Acknowledgements](#acknowledgements)
* [免责声明](#免责声明)## About The Project
**注意:如果仓库下载不了或者下载不全,请到release中去下载**
这个项目是我在没学过编译原理的情况下,看了几篇编译相关的文章,然后跟着感觉写的,里面有些编译流程可能不是标准的。编译过程中没有生成中间代码,直接从源代码构建语法树,然后根据语法树生成机器代码。这个项目是最终是用来参加一个编译优化比赛的,编写过程都是从简考虑,基本没有注释,但是变量名和函数名对功能的解释比较清楚。
如果您使用这个代码来学习编译原理,并在原代码的基础上做了优化改进或者添加了注释,可以考虑提交一个pull request整合到该仓库里面,这将极大的方便他人的学习,感谢您的付出。该项目参考开源编译器9cc开发 [https://github.com/rui314/9cc](https://github.com/rui314/9cc)
运行结果:(其中有一个样例是RE,可能是由于我们函数合并的优化没有考虑数组传入的情况)
[![Product Name Screen Shot][product-screenshot00]](https://github.com/DaviesGit)
编译器一共包括`词法分析`、`语法分析`、`语义分析`、`优化`、`目标代码`等6个部分。
![result01](readme_images/result01.jpeg)
语法树结构部分:
![result02](readme_images/result02.jpeg)
词法分析部分:
![result03](readme_images/result03.jpeg)
语法分析部分:
![result04](readme_images/result04.jpeg)
语义分析部分:
![result05](readme_images/result05.jpeg)
目标代码生成部分:
![result06](readme_images/result06.jpeg)
代码优化部分:
![result07](readme_images/result07.jpeg)
系统架构:
![Compiler](readme_images/Compiler.png)
SysY 语言是 C 语言的一个子集。每个 SysY程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅有一个名为 main的主函数定义,还可以包含若干全局变量声明、常量声明和其他函数定义。SysY语言支持 int 类型和元素为 int 类型且按行优先存储的多维数组类型,其中 int 型整数为 32 位有符号数;const 修饰符用于声明常量。
详细的SysY语言定义请参考`SysY语言定义.pdf`、`SysY运行时库.pdf`。
该编译器主要用来将SysY语言编译为arm汇编指令,并且对编译生成的代码进行优化。
功能:
* 词法分析
* 语法分析
* 语义分析
* 目标代码
* 优化> 1. 对常量表达式进行化简求值
> 2. 合并冗余的函数调用
> 3. 高频访问的变量使用寄存器优化,减少内存访问。
> 4. 合并arm代码中不必要的mov指令。
> 5. 将函数内联进代码中,减少函数调用开销。
> 6. 更多### Built With
依赖
* [CMake](https://cmake.org/)- [Make - GNU Project - Free Software Foundation - GNU.org](https://www.gnu.org/software/make/)
- [GCC, the GNU Compiler Collection - GNU Project - Free ...](https://gcc.gnu.org/)
## Getting Started
这个章节将指导你简单的部署和使用该软件。
### Prerequisites
这个项目的依赖安装步骤在下面给出。
* [CMake](https://cmake.org/)
```sh
sudo apt-get install cmake
```- [Make - GNU Project - Free Software Foundation - GNU.org](https://www.gnu.org/software/make/)
```sh
sudo apt-get install make
```- [GCC, the GNU Compiler Collection - GNU Project - Free ...](https://gcc.gnu.org/)
```sh
sudo apt-get install gcc
```### Installation
1. 进入项目根目录
```
cd /path/to/your/project
```2. 在shell中运行一下代码进行编译
```sh
mkdir build
cd build
rm CMake* cmake_install.cmake Makefile compiler -r;
cmake ../ && make VERBOSE=1
```3. 在build文件夹中会生成一个compiler可执行文件。
## Usage
1. 编译sy文件不进行优化
```sh
compiler ‘输入文件.sy’ -S -o ‘输出文件.s’
```2. 编译sy文件进行O2优化
```sh
compiler ‘输入文件.sy’ -S -o ‘输出文件.s’ -O2
```##
## 功能定制
如果需要功能定制,请联系作者 [[email protected]]([email protected])
## Roadmap
See the [open issues](https://example.com) for a list of proposed features (and known issues).
## Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request## License
Distributed under the MIT License. See `LICENSE` for more information.
## Contact
Davies - [@qq](1182176003) - 1182176003
Davies - [@email]([email protected]) - [email protected]
## Acknowledgements
* [GitHub](https://github.com/)
* [GCC, the GNU Compiler Collection](https://gcc.gnu.org/)## 免责声明
* 该软件中所包含的部分内容,包括文字、图片、音频、视频、软件、代码、以及网页版式设计等可能来源于网上搜集。* 该软件提供的内容仅用于个人学习、研究或欣赏,不可使用于商业和其它意图,一切关于该软件的不正当使用行为均与我们无关,亦不承担任何法律责任。使用该软件应遵守相关法律的规定,通过使用该软件随之而来的风险与我们无关,若使用不当,后果均由个人承担。
* 该软件不提供任何形式的保证。我们不保证内容的正确性与完整性。所有与使用该软件的直接风险均由用户承担。
* 如果您认为该软件中所包含的部分内容侵犯了您的权益,请及时通知我们,我们将尽快予以修正或删除。
[license-shield]: readme_images/MIT_license.svg
[license-url]: https://opensource.org/licenses/MIT[product-screenshot]: readme_images/screenshot.png
[product-screenshot00]: readme_images/result00.png