# 基于Java的SYSY编译器
🚀 **SYSY-Compiler** 是一个用于编译miniSysY语言的编译器项目,旨在将miniSysY代码编译到LLVM IR。该项目是软件学院大三编译原理课程设计的一部分。
## 项目概述
- **miniSysY语言**:miniSysY是SysY语言的一个子集,是C语言的简化版本。
- **编译目标**:将miniSysY代码编译到LLVM IR。
- **功能实现**:从编译一个简单的main()函数开始,逐渐扩充对miniSysY语言文法的支持,实现一个较为完整的编译器。
## SYSY文法
项目支持完整的SYSY文法,包括变量声明、函数定义、控制结构(如if、while)、运算符等。详细文法请参考[SYSY文法](#sysy-文法)。
## 主要组件
- **ASTNode.java**:定义抽象语法树(AST)节点,提供处理和访问节点的方法。
- **ASTNodeType.java**:枚举类型,表示AST中的不同节点类型。
- **Lexer.java**:词法分析器,将输入文件中的文本转换为一系列标记(tokens)。
- **Main.java**:主程序入口,处理命令行参数,读取并处理输入文件,进行词法分析和语法分析。
- **ParseException.java**:自定义异常类,用于处理解析过程中的错误。
- **Parser.java**:解析器,将Token序列转换为抽象语法树(AST)。
- **Rule.java**:定义编程语言中的规则、关键字或符号等元素。
- **Symbol.java**:表示编程语言中的符号,如变量、常量等。
- **SymbolBlock.java**:管理符号集,用于在程序中定义和查找变量、常量等符号。
- **SymbolTable.java**:管理符号表,包含代码运行时需要的各种变量、函数等符号信息。
- **Token.java**:表示源代码解析过程中的标识符。
- **TokenType.java**:枚举类,表示编程语言中的不同类型的标识符。
- **Visitor.java**:遍历和解析抽象语法树(AST),根据给定的AST节点类型执行不同的操作或逻辑处理。
## 使用方法
1. 克隆项目到本地:
```bash
```
2. 编译项目:
```bash
cd SYSY-Compiler
javac src/*.java -d out
```
3. 运行编译器:
```bash
java -cp out Main <输入文件路径> <输出文件路径>
```
## 贡献
欢迎贡献代码、提出问题或建议。请参考[贡献指南](CONTRIBUTING.md)。
## 许可证
本项目采用[MIT许可证](LICENSE)。
---
👏 感谢您的关注和支持!如果您有任何问题或建议,请随时联系我们。