chore(misc): 按目录结构设计初始化工程骨架
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# 忽略构建产物与中间文件:
|
||||
# - build/ 等构建目录
|
||||
# - ANTLR 自动生成文件(若产生在源码树中应忽略)
|
||||
# - test/test_result/ 等测试输出目录
|
||||
|
||||
5
CMakeLists.txt
Normal file
5
CMakeLists.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
# 工程构建入口:
|
||||
# - 配置 C/C++ 编译器与标准、编译选项、输出目录等
|
||||
# - 添加 src/ 子目录并链接生成最终可执行文件
|
||||
# - 集成 ANTLR4 C++ runtime(通过系统依赖或第三方源码),并将构建目录下的 ANTLR 生成代码纳入编译
|
||||
|
||||
8
README.md
Normal file
8
README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
<!--
|
||||
工程说明文档:
|
||||
- 依赖环境(CMake、C++ 编译器、ANTLR4 等)
|
||||
- 构建方式(例如 out-of-source build)
|
||||
- 运行/测试脚本用法
|
||||
- ANTLR 生成命令说明(写在文档中,不提供脚本)
|
||||
-->
|
||||
|
||||
4
src/CMakeLists.txt
Normal file
4
src/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
# src/ 子目录构建脚本:
|
||||
# - 收集并编译各子模块源文件(frontend/ast/sem/irgen/ir/mir/utils)
|
||||
# - 生成库或目标对象并链接到最终可执行文件
|
||||
|
||||
3
src/antlr4/SysY.g4
Normal file
3
src/antlr4/SysY.g4
Normal file
@@ -0,0 +1,3 @@
|
||||
// SysY 语法定义(lexer + parser rules)的占位文件。
|
||||
// 注意:ANTLR 生成的 C++ 源码/头文件不进入仓库,统一放在构建目录(例如 build/generated/antlr4/)。
|
||||
|
||||
4
src/ast/AstNodes.cpp
Normal file
4
src/ast/AstNodes.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// AST 节点定义与实现:
|
||||
// - 表达式、语句、声明、函数、类型等节点
|
||||
// - 支持后续阶段在节点上附加信息(类型、符号绑定、常量值等)
|
||||
|
||||
4
src/ast/AstPrinter.cpp
Normal file
4
src/ast/AstPrinter.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// AST 调试打印:
|
||||
// - 以可读形式打印 AST 结构
|
||||
// - 用于验证 AST 构建与语义分析结果,便于定位问题
|
||||
|
||||
5
src/frontend/AntlrDriver.cpp
Normal file
5
src/frontend/AntlrDriver.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
// 前端解析驱动:
|
||||
// - 读取源代码
|
||||
// - 调用 ANTLR 生成的 lexer/parser 得到 parse tree
|
||||
// - 对外提供“可用的解析入口”(语法正确性由测试保证)
|
||||
|
||||
4
src/frontend/AstBuilder.cpp
Normal file
4
src/frontend/AstBuilder.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// AST 构建:
|
||||
// - 将 ANTLR parse tree 转换为 AST(对应 src/ast/*)
|
||||
// - 在 AST 节点上保留必要的定位信息(可选,用于调试/日志)
|
||||
|
||||
4
src/ir/BasicBlock.cpp
Normal file
4
src/ir/BasicBlock.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 基本块:
|
||||
// - 保存指令序列
|
||||
// - 维护或可计算前驱/后继关系,用于 CFG 分析与优化
|
||||
|
||||
4
src/ir/Context.cpp
Normal file
4
src/ir/Context.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 上下文:
|
||||
// - 管理类型与常量的创建/复用
|
||||
// - 保存字符串常量、符号等公共资源(按需要扩展)
|
||||
|
||||
4
src/ir/Function.cpp
Normal file
4
src/ir/Function.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR Function:
|
||||
// - 保存参数列表、基本块列表
|
||||
// - 记录函数属性/元信息(按需要扩展)
|
||||
|
||||
4
src/ir/IRBuilder.cpp
Normal file
4
src/ir/IRBuilder.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 构建工具:
|
||||
// - 管理插入点(当前基本块/位置)
|
||||
// - 提供创建各类指令的便捷接口,降低 IRGen 复杂度
|
||||
|
||||
4
src/ir/IRPrinter.cpp
Normal file
4
src/ir/IRPrinter.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 文本输出:
|
||||
// - 将 IR 打印为 .ll 风格的文本
|
||||
// - 支撑调试与测试对比(diff)
|
||||
|
||||
4
src/ir/Instruction.cpp
Normal file
4
src/ir/Instruction.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 指令体系:
|
||||
// - 二元运算/比较、load/store、call、br/condbr、ret、phi、alloca 等
|
||||
// - 指令操作数与结果类型管理,支持打印与优化
|
||||
|
||||
4
src/ir/Module.cpp
Normal file
4
src/ir/Module.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR Module:
|
||||
// - 保存全局变量与函数列表
|
||||
// - 维护与目标相关的模块级信息(如需要)与符号表
|
||||
|
||||
4
src/ir/Type.cpp
Normal file
4
src/ir/Type.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 类型系统:
|
||||
// - i32/f32/void、指针、数组、函数类型等
|
||||
// - 按 SysY 支持范围裁剪并逐步补齐
|
||||
|
||||
4
src/ir/Value.cpp
Normal file
4
src/ir/Value.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// SSA 值体系抽象:
|
||||
// - 常量、参数、指令结果等统一为 Value
|
||||
// - 提供类型信息与使用/被使用关系(按需要实现)
|
||||
|
||||
4
src/ir/analysis/DominatorTree.cpp
Normal file
4
src/ir/analysis/DominatorTree.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 支配树分析:
|
||||
// - 构建/查询 Dominator Tree 及相关关系
|
||||
// - 为 mem2reg、CFG 优化与循环分析提供基础能力
|
||||
|
||||
4
src/ir/analysis/LoopInfo.cpp
Normal file
4
src/ir/analysis/LoopInfo.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 循环分析:
|
||||
// - 识别循环结构与层级关系
|
||||
// - 为后续优化(可选)提供循环信息
|
||||
|
||||
4
src/ir/passes/CFGSimplify.cpp
Normal file
4
src/ir/passes/CFGSimplify.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// CFG 简化:
|
||||
// - 删除不可达块、合并空块、简化分支等
|
||||
// - 改善 IR 结构,便于后续优化与后端生成
|
||||
|
||||
4
src/ir/passes/ConstFold.cpp
Normal file
4
src/ir/passes/ConstFold.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR 常量折叠:
|
||||
// - 折叠可判定的常量表达式
|
||||
// - 简化常量控制流分支(按实现范围裁剪)
|
||||
|
||||
4
src/ir/passes/DCE.cpp
Normal file
4
src/ir/passes/DCE.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 死代码删除(DCE):
|
||||
// - 删除无用指令与无用基本块
|
||||
// - 通常与 CFG 简化配合使用
|
||||
|
||||
4
src/ir/passes/Mem2Reg.cpp
Normal file
4
src/ir/passes/Mem2Reg.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// Mem2Reg(SSA 构造):
|
||||
// - 将局部变量的 alloca/load/store 提升为 SSA 形式
|
||||
// - 插入 PHI 并重写使用,依赖支配树等分析
|
||||
|
||||
4
src/ir/passes/PassManager.cpp
Normal file
4
src/ir/passes/PassManager.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR Pass 管理:
|
||||
// - 按优化级别组织优化 pipeline
|
||||
// - 统一运行 pass、统计与调试输出(按需要扩展)
|
||||
|
||||
5
src/irgen/IRGen.cpp
Normal file
5
src/irgen/IRGen.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
// AST -> IR(平台无关、LLVM 风格):
|
||||
// - 将带语义信息的 AST 翻译为 src/ir/* 中的 IR 结构
|
||||
// - 负责控制流结构化翻译(基本块、分支、循环)
|
||||
// - 生成函数与全局对象,翻译表达式求值与调用等
|
||||
|
||||
5
src/main.cpp
Normal file
5
src/main.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
// 编译器入口:
|
||||
// - 解析命令行参数(输入源文件、输出路径、输出类型、优化级别等)
|
||||
// - 驱动完整流水线:Frontend -> Middle-end -> Backend
|
||||
// - 统一管理阶段产物输出(例如 .ll/.s 的输出开关)
|
||||
|
||||
4
src/mir/AsmPrinter.cpp
Normal file
4
src/mir/AsmPrinter.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 汇编打印:
|
||||
// - 将最终机器指令(MIR)打印为 ARMv8-A / AArch64 汇编(.s)
|
||||
// - 负责标签、伪指令、段信息等输出(按需要实现)
|
||||
|
||||
4
src/mir/FrameLowering.cpp
Normal file
4
src/mir/FrameLowering.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 栈帧构建与序言尾声插入:
|
||||
// - 计算栈大小与对齐需求,分配栈槽
|
||||
// - 插入 prologue/epilogue,保存/恢复 callee-saved 等
|
||||
|
||||
4
src/mir/Lowering.cpp
Normal file
4
src/mir/Lowering.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// IR -> MIR(AArch64 指令选择):
|
||||
// - 将平台无关 IR 翻译为 AArch64 的机器指令序列
|
||||
// - 初始阶段使用虚拟寄存器,生成 MIRFunction/MIRBasicBlock/MIRInstr
|
||||
|
||||
4
src/mir/MIRBasicBlock.cpp
Normal file
4
src/mir/MIRBasicBlock.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 机器基本块(MIRBasicBlock):
|
||||
// - 维护机器指令列表
|
||||
// - 记录或可计算机器级 CFG 前驱/后继信息
|
||||
|
||||
4
src/mir/MIRContext.cpp
Normal file
4
src/mir/MIRContext.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// MIR 上下文:
|
||||
// - 保存目标约束、指令集信息等(面向 AArch64)
|
||||
// - 为后端 Lowering/RegAlloc/FrameLowering 提供公共信息
|
||||
|
||||
4
src/mir/MIRFunction.cpp
Normal file
4
src/mir/MIRFunction.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 机器函数(MIRFunction):
|
||||
// - 包含机器基本块列表与 CFG 信息
|
||||
// - 维护栈帧信息、虚拟/物理寄存器使用情况等
|
||||
|
||||
4
src/mir/MIRInstr.cpp
Normal file
4
src/mir/MIRInstr.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 机器指令(MIRInstr):
|
||||
// - opcode + operands(寄存器/立即数/栈槽/符号/标签等)
|
||||
// - 支撑指令选择、寄存器分配与汇编打印
|
||||
|
||||
4
src/mir/RegAlloc.cpp
Normal file
4
src/mir/RegAlloc.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 寄存器分配:
|
||||
// - 将虚拟寄存器分配到物理寄存器
|
||||
// - 处理 spill/reload,并为后续栈帧布局提供栈槽需求信息
|
||||
|
||||
4
src/mir/Register.cpp
Normal file
4
src/mir/Register.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 寄存器表示:
|
||||
// - 区分虚拟寄存器与物理寄存器,提供编号/属性等
|
||||
// - 寄存器类(RegClass):GPR/FPR 等分类与可分配集合描述(供 RA 使用)
|
||||
|
||||
4
src/mir/passes/PassManager.cpp
Normal file
4
src/mir/passes/PassManager.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// MIR Pass 管理:
|
||||
// - 组织后端 pass 的运行顺序(PreRA/PostRA/PEI 等阶段)
|
||||
// - 统一运行 pass 与调试输出(按需要扩展)
|
||||
|
||||
4
src/mir/passes/Peephole.cpp
Normal file
4
src/mir/passes/Peephole.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 窥孔优化(Peephole):
|
||||
// - 删除冗余 move、合并常见指令模式
|
||||
// - 提升最终汇编质量(按实现范围裁剪)
|
||||
|
||||
4
src/sem/ConstEval.cpp
Normal file
4
src/sem/ConstEval.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 常量求值:
|
||||
// - 处理数组维度、全局初始化、const 表达式等编译期可计算场景
|
||||
// - 为语义分析与 IR 生成提供常量折叠/常量值信息
|
||||
|
||||
5
src/sem/Sema.cpp
Normal file
5
src/sem/Sema.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
// 语义分析主流程:
|
||||
// - 符号解析与绑定、类型检查、控制流规则检查
|
||||
// - 记录/插入必要的隐式转换(或在节点上标注)
|
||||
// - 输出为“带类型 / 符号 / 常量信息”的 AST
|
||||
|
||||
4
src/sem/SymbolTable.cpp
Normal file
4
src/sem/SymbolTable.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 符号表与作用域管理:
|
||||
// - 支持嵌套作用域(块/函数/全局)
|
||||
// - 变量/函数/参数/常量的注册、查找与遮蔽规则
|
||||
|
||||
5
src/utils/CLI.cpp
Normal file
5
src/utils/CLI.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
// 命令行参数解析:
|
||||
// - 解析输入/输出路径
|
||||
// - 解析输出类型(IR/MIR/ASM)与优化级别等选项
|
||||
// - 将参数传递给 main.cpp 的编译流水线驱动
|
||||
|
||||
4
src/utils/Log.cpp
Normal file
4
src/utils/Log.cpp
Normal file
@@ -0,0 +1,4 @@
|
||||
// 日志模块:
|
||||
// - 统一输出调试信息、阶段信息与错误信息
|
||||
// - 提供可配置的日志级别与输出位置(按需要实现)
|
||||
|
||||
4
sylib/sylib.c
Normal file
4
sylib/sylib.c
Normal file
@@ -0,0 +1,4 @@
|
||||
// SysY 运行库实现:
|
||||
// - 按实验/评测规范提供 I/O 等函数实现
|
||||
// - 与编译器生成的目标代码链接,支撑运行时行为
|
||||
|
||||
4
sylib/sylib.h
Normal file
4
sylib/sylib.h
Normal file
@@ -0,0 +1,4 @@
|
||||
// SysY 运行库头文件:
|
||||
// - 声明运行库函数原型(供编译器生成 call 或链接阶段引用)
|
||||
// - 与 sylib.c 配套,按规范逐步补齐声明
|
||||
|
||||
5
test/run_tests.sh
Normal file
5
test/run_tests.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
# Bash 测试脚本:
|
||||
# - 批量编译 test/test_case/ 下的 *.sy 用例
|
||||
# - 将产物与日志写入 test/test_result/(例如 .ll/.s、运行输出、diff 结果)
|
||||
# - 汇总通过/失败信息并给出统计
|
||||
|
||||
Reference in New Issue
Block a user