SNL-Compiler 是一个简单的编译器,支持 SNL 语言的词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成。
编译器的各个模块包括:
- 词法分析器:将源代码转换为Token序列。
- 语法分析器:将Token序列转换为语法树。
- 语义分析器:检查语法树的语义正确性并生成符号表。
- 中间代码生成器:将语法树转换为中间代码。
- 优化器:对中间代码进行优化。
- 目标代码生成器:将中间代码转换为目标代码。
SNL-Compiler
├── cmake-build-debug
├── input(测试文件)
│ ├── common
│ ├── complex
│ ├── error
│ ├── optimize
├── output(输出文件)
│ ├── 1-lexer.txt
│ ├── 2-parser.txt
│ ├── 3-analyzer.txt
│ ├── 4-interCode.txt
│ ├── 5-optimizer.txt
│ ├── 6-objectCode.txt
├── header(头文件)
│ ├── 0-util.h
│ ├── 1-lexer.h
│ ├── 2-parser.h
│ ├── 2-syntaxTree.h
│ ├── 3-analyzer.h
│ ├── 4-interCode.h
│ ├── 5-optimizer.h
│ ├── 6-objectCode.h
├── source(源文件)
│ ├── 0-util.cpp
│ ├── 1-lexer.cpp
│ ├── 2-parser.cpp
│ ├── 2-syntaxTree.cpp
│ ├── 3-analyzer.cpp
│ ├── 4-interCode.cpp
│ ├── 5-optimizer.cpp
│ ├── 6-objectCode.cpp
├── main.cpp
├── README.md
├── CMAKELists.txt
├── Mars for Compile 2022.jar(mips代码运行器)
- Windows
- Clion 2024.3.5
- Java 1.8+ (for Mars)
- clone 本项目
- 使用 Clion 打开项目
- 运行 main.cpp
- 输入 input 目录下的测试文件的相对路径(例如:
input/complex/0-bubbleSort.txt
) - 查看 output 目录下的输出文件
- 在 Mars for Compile 2022.jar 中打开 output/6-objectCode.txt 文件,编译运行 mips 代码