Skip to content

该编译器主要用来将SysY语言编译为arm汇编指令,并且对编译生成的代码进行优化。SysY 语言是 C 语言的一个子集。每个 SysY程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅有一个名为 main的主函数定义,还可以包含若干全局变量声明、常量声明和其他函数定义。SysY语言支持 int 类型和元素为 int 类型且按行优先存储的多维数组类型,其中 int 型整数为 32 位有符号数;const 修饰符用于声明常量。

License

Notifications You must be signed in to change notification settings

lvf411/SysY_compiler

 
 

Repository files navigation

MIT License


Logo

Maked by Davies

Email: [email protected]

Table of Contents

About The Project

运行结果:(其中有一个样例是RE,可能是由于我们函数合并的优化没有考虑数组传入的情况)

Product Name Screen Shot

编译器一共包括词法分析语法分析语义分析优化目标代码等6个部分。

result01

语法树结构部分:

result02

词法分析部分:

result03

语法分析部分:

result04

语义分析部分:

result05

目标代码生成部分:

result06

代码优化部分:

result07

系统架构:

Compiler

SysY 语言是 C 语言的一个子集。每个 SysY程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅有一个名为 main的主函数定义,还可以包含若干全局变量声明、常量声明和其他函数定义。SysY语言支持 int 类型和元素为 int 类型且按行优先存储的多维数组类型,其中 int 型整数为 32 位有符号数;const 修饰符用于声明常量。

详细的SysY语言定义请参考SysY语言定义.pdfSysY运行时库.pdf

该编译器主要用来将SysY语言编译为arm汇编指令,并且对编译生成的代码进行优化。

功能:

  • 词法分析
  • 语法分析
  • 语义分析
  • 目标代码
  • 优化
  1. 对常量表达式进行化简求值
  2. 合并冗余的函数调用
  3. 高频访问的变量使用寄存器优化,减少内存访问。
  4. 合并arm代码中不必要的mov指令。
  5. 将函数内联进代码中,减少函数调用开销。
  6. 更多

Built With

依赖

Getting Started

这个章节将指导你简单的部署和使用该软件。

Prerequisites

这个项目的依赖安装步骤在下面给出。

sudo apt-get install cmake
sudo apt-get install make
sudo apt-get install gcc

Installation

  1. 进入项目根目录
cd /path/to/your/project
  1. 在shell中运行一下代码进行编译
mkdir build
cd build
rm CMake* cmake_install.cmake Makefile compiler -r;
cmake ../ && make VERBOSE=1
  1. 在build文件夹中会生成一个compiler可执行文件。

Usage

  1. 编译sy文件不进行优化
compiler ‘输入文件.sy’ -S -o ‘输出文件.s’
  1. 编译sy文件进行O2优化
compiler ‘输入文件.sy’ -S -o ‘输出文件.s’ -O2

功能定制

如果需要功能定制,请联系作者 [email protected]

Roadmap

See the open issues 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

Davies - @email - [email protected]

Acknowledgements

免责声明

  • 该软件中所包含的部分内容,包括文字、图片、音频、视频、软件、代码、以及网页版式设计等可能来源于网上搜集。

  • 该软件提供的内容仅用于个人学习、研究或欣赏,不可使用于商业和其它意图,一切关于该软件的不正当使用行为均与我们无关,亦不承担任何法律责任。使用该软件应遵守相关法律的规定,通过使用该软件随之而来的风险与我们无关,若使用不当,后果均由个人承担。

  • 该软件不提供任何形式的保证。我们不保证内容的正确性与完整性。所有与使用该软件的直接风险均由用户承担。

  • 如果您认为该软件中所包含的部分内容侵犯了您的权益,请及时通知我们,我们将尽快予以修正或删除。

About

该编译器主要用来将SysY语言编译为arm汇编指令,并且对编译生成的代码进行优化。SysY 语言是 C 语言的一个子集。每个 SysY程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅有一个名为 main的主函数定义,还可以包含若干全局变量声明、常量声明和其他函数定义。SysY语言支持 int 类型和元素为 int 类型且按行优先存储的多维数组类型,其中 int 型整数为 32 位有符号数;const 修饰符用于声明常量。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 97.8%
  • C 1.4%
  • Other 0.8%