# go-compiler-py **Repository Path**: sheenashea/go-compiler-py ## Basic Information - **Project Name**: go-compiler-py - **Description**: go语言编译器python版本 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-17 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go语言编译器 - Python版本 使用ANTLR4实现的Go语言编译器,支持Go语言的核心子集。 ## 功能特性 ### 基本功能 - ✅ 词法分析和语法分析 - ✅ 语法树生成和可视化 - ✅ 语义分析和类型检查 - ✅ 三地址代码生成 - ✅ x86-64汇编代码生成 ### 附加功能 - ✅ 错误分析和恢复 - ✅ 代码优化 - ✅ 详细的错误信息 ## 系统要求 - Python 3.10+ - Java JDK 11+ (用于运行ANTLR4) ## 安装 ### 1. 安装Python依赖 ```bash pip install -r requirements.txt ``` ### 2. 生成解析器 ```bash python generate_parser.py ``` 这会自动下载ANTLR4 JAR并生成Python解析器。 ## 使用方法 ### 基本编译 ```bash python src/compiler/main.py examples/hello.go ``` ### 显示语法树 ```bash python src/compiler/main.py -ast examples/hello.go ``` ### 生成三地址代码 ```bash python src/compiler/main.py -tac examples/hello.go ``` ### 生成汇编代码 ```bash python src/compiler/main.py -asm examples/hello.go ``` ### 启用优化 ```bash python src/compiler/main.py -O -tac examples/hello.go ``` ### 详细输出 ```bash python src/compiler/main.py -v -tac -asm examples/hello.go ``` ### 所有选项 ``` 用法: main.py [选项] <源文件> 选项: -ast 显示语法树 -ast-out FILE 将语法树保存到文件 -tac 显示三地址代码 -tac-out FILE 将三地址代码保存到文件 -asm 显示汇编代码 -asm-out FILE 将汇编代码保存到文件 -O 启用优化 -tokens 显示词法单元 -v 详细输出 -continue 遇到错误继续编译 ``` ## 支持的Go语言特性 ### 数据类型 - 基本类型: int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64 - 浮点类型: float32, float64 - 其他类型: bool, string, byte, rune - 复合类型: 数组, 切片, 映射, 指针, 结构体 ### 声明 - 变量声明: `var x int = 10` - 短变量声明: `x := 10` - 常量声明: `const PI = 3.14` - 函数声明: `func add(a, b int) int { return a + b }` ### 控制结构 - if-else语句 - for循环 (传统式, while式, 无限循环, range) - switch语句 - break, continue, return ### 运算符 - 算术: +, -, *, /, % - 比较: ==, !=, <, <=, >, >= - 逻辑: &&, ||, ! - 位运算: &, |, ^, <<, >> ### 内置函数 - println, print - len, cap - make, new, append ## 项目结构 ``` go-compiler-py/ ├── grammar/ # ANTLR4语法文件 │ ├── GoLexer.g4 # 词法分析器语法 │ └── GoParser.g4 # 语法分析器语法 ├── src/ │ └── compiler/ │ ├── parser/ # ANTLR4生成的解析器 │ ├── main.py # 主入口 │ ├── types.py # 类型系统 │ ├── symbol_table.py # 符号表 │ ├── errors.py # 错误处理 │ ├── ast_visualizer.py # AST可视化 │ ├── semantic_analyzer.py # 语义分析 │ ├── tac.py # 三地址代码生成 │ ├── asm_generator.py # 汇编代码生成 │ └── optimizer.py # 代码优化 ├── examples/ # 示例Go程序 ├── generate_parser.py # 解析器生成脚本 ├── requirements.txt # Python依赖 └── README.md # 本文件 ``` ## 三地址代码格式 生成的三地址代码格式: ``` func main: // 函数 main 开始 t0 = 10 + 20 result = t0 println result return endfunc main ``` ## 汇编代码格式 生成的x86-64汇编代码使用NASM语法: ```nasm section .data fmt_int_nl db "%lld", 10, 0 section .text global main main: push rbp mov rbp, rsp ; 函数体代码 pop rbp ret ``` ## 代码优化 支持的优化: - 常量折叠 - 常量传播 - 死代码消除 - 代数简化 - 复制传播 - 无用跳转删除 - 窥孔优化 ## 示例 ### Hello World ```go package main func main() { println("Hello, World!") } ``` ### 递归函数 ```go package main func factorial(n int) int { if n <= 1 { return 1 } return n * factorial(n - 1) } func main() { result := factorial(5) println(result) } ``` ## 许可证 MIT License