chore(misc): 按目录结构设计初始化工程骨架

master
Lane0218 3 months ago
parent b30c963eb7
commit cf2e6e0b46

5
.gitignore vendored

@ -0,0 +1,5 @@
# 忽略构建产物与中间文件:
# - build/ 等构建目录
# - ANTLR 自动生成文件(若产生在源码树中应忽略)
# - test/test_result/ 等测试输出目录

@ -0,0 +1,5 @@
#
# - C/C++
# - src/
# - ANTLR4 C++ runtime ANTLR

@ -0,0 +1,8 @@
<!--
工程说明文档:
- 依赖环境CMake、C++ 编译器、ANTLR4 等)
- 构建方式(例如 out-of-source build
- 运行/测试脚本用法
- ANTLR 生成命令说明(写在文档中,不提供脚本)
-->

@ -0,0 +1,4 @@
# src/
# - frontend/ast/sem/irgen/ir/mir/utils
# -

@ -0,0 +1,3 @@
// SysY 语法定义lexer + parser rules的占位文件。
// 注意ANTLR 生成的 C++ 源码/头文件不进入仓库,统一放在构建目录(例如 build/generated/antlr4/)。

@ -0,0 +1,4 @@
// AST 节点定义与实现:
// - 表达式、语句、声明、函数、类型等节点
// - 支持后续阶段在节点上附加信息(类型、符号绑定、常量值等)

@ -0,0 +1,4 @@
// AST 调试打印:
// - 以可读形式打印 AST 结构
// - 用于验证 AST 构建与语义分析结果,便于定位问题

@ -0,0 +1,5 @@
// 前端解析驱动:
// - 读取源代码
// - 调用 ANTLR 生成的 lexer/parser 得到 parse tree
// - 对外提供“可用的解析入口”(语法正确性由测试保证)

@ -0,0 +1,4 @@
// AST 构建:
// - 将 ANTLR parse tree 转换为 AST对应 src/ast/*
// - 在 AST 节点上保留必要的定位信息(可选,用于调试/日志)

@ -0,0 +1,4 @@
// IR 基本块:
// - 保存指令序列
// - 维护或可计算前驱/后继关系,用于 CFG 分析与优化

@ -0,0 +1,4 @@
// IR 上下文:
// - 管理类型与常量的创建/复用
// - 保存字符串常量、符号等公共资源(按需要扩展)

@ -0,0 +1,4 @@
// IR Function
// - 保存参数列表、基本块列表
// - 记录函数属性/元信息(按需要扩展)

@ -0,0 +1,4 @@
// IR 构建工具:
// - 管理插入点(当前基本块/位置)
// - 提供创建各类指令的便捷接口,降低 IRGen 复杂度

@ -0,0 +1,4 @@
// IR 文本输出:
// - 将 IR 打印为 .ll 风格的文本
// - 支撑调试与测试对比diff

@ -0,0 +1,4 @@
// IR 指令体系:
// - 二元运算/比较、load/store、call、br/condbr、ret、phi、alloca 等
// - 指令操作数与结果类型管理,支持打印与优化

@ -0,0 +1,4 @@
// IR Module
// - 保存全局变量与函数列表
// - 维护与目标相关的模块级信息(如需要)与符号表

@ -0,0 +1,4 @@
// IR 类型系统:
// - i32/f32/void、指针、数组、函数类型等
// - 按 SysY 支持范围裁剪并逐步补齐

@ -0,0 +1,4 @@
// SSA 值体系抽象:
// - 常量、参数、指令结果等统一为 Value
// - 提供类型信息与使用/被使用关系(按需要实现)

@ -0,0 +1,4 @@
// 支配树分析:
// - 构建/查询 Dominator Tree 及相关关系
// - 为 mem2reg、CFG 优化与循环分析提供基础能力

@ -0,0 +1,4 @@
// 循环分析:
// - 识别循环结构与层级关系
// - 为后续优化(可选)提供循环信息

@ -0,0 +1,4 @@
// CFG 简化:
// - 删除不可达块、合并空块、简化分支等
// - 改善 IR 结构,便于后续优化与后端生成

@ -0,0 +1,4 @@
// IR 常量折叠:
// - 折叠可判定的常量表达式
// - 简化常量控制流分支(按实现范围裁剪)

@ -0,0 +1,4 @@
// 死代码删除DCE
// - 删除无用指令与无用基本块
// - 通常与 CFG 简化配合使用

@ -0,0 +1,4 @@
// Mem2RegSSA 构造):
// - 将局部变量的 alloca/load/store 提升为 SSA 形式
// - 插入 PHI 并重写使用,依赖支配树等分析

@ -0,0 +1,4 @@
// IR Pass 管理:
// - 按优化级别组织优化 pipeline
// - 统一运行 pass、统计与调试输出按需要扩展

@ -0,0 +1,5 @@
// AST -> IR平台无关、LLVM 风格):
// - 将带语义信息的 AST 翻译为 src/ir/* 中的 IR 结构
// - 负责控制流结构化翻译(基本块、分支、循环)
// - 生成函数与全局对象,翻译表达式求值与调用等

@ -0,0 +1,5 @@
// 编译器入口:
// - 解析命令行参数(输入源文件、输出路径、输出类型、优化级别等)
// - 驱动完整流水线Frontend -> Middle-end -> Backend
// - 统一管理阶段产物输出(例如 .ll/.s 的输出开关)

@ -0,0 +1,4 @@
// 汇编打印:
// - 将最终机器指令MIR打印为 ARMv8-A / AArch64 汇编(.s
// - 负责标签、伪指令、段信息等输出(按需要实现)

@ -0,0 +1,4 @@
// 栈帧构建与序言尾声插入:
// - 计算栈大小与对齐需求,分配栈槽
// - 插入 prologue/epilogue保存/恢复 callee-saved 等

@ -0,0 +1,4 @@
// IR -> MIRAArch64 指令选择):
// - 将平台无关 IR 翻译为 AArch64 的机器指令序列
// - 初始阶段使用虚拟寄存器,生成 MIRFunction/MIRBasicBlock/MIRInstr

@ -0,0 +1,4 @@
// 机器基本块MIRBasicBlock
// - 维护机器指令列表
// - 记录或可计算机器级 CFG 前驱/后继信息

@ -0,0 +1,4 @@
// MIR 上下文:
// - 保存目标约束、指令集信息等(面向 AArch64
// - 为后端 Lowering/RegAlloc/FrameLowering 提供公共信息

@ -0,0 +1,4 @@
// 机器函数MIRFunction
// - 包含机器基本块列表与 CFG 信息
// - 维护栈帧信息、虚拟/物理寄存器使用情况等

@ -0,0 +1,4 @@
// 机器指令MIRInstr
// - opcode + operands寄存器/立即数/栈槽/符号/标签等)
// - 支撑指令选择、寄存器分配与汇编打印

@ -0,0 +1,4 @@
// 寄存器分配:
// - 将虚拟寄存器分配到物理寄存器
// - 处理 spill/reload并为后续栈帧布局提供栈槽需求信息

@ -0,0 +1,4 @@
// 寄存器表示:
// - 区分虚拟寄存器与物理寄存器,提供编号/属性等
// - 寄存器类RegClassGPR/FPR 等分类与可分配集合描述(供 RA 使用)

@ -0,0 +1,4 @@
// MIR Pass 管理:
// - 组织后端 pass 的运行顺序PreRA/PostRA/PEI 等阶段)
// - 统一运行 pass 与调试输出(按需要扩展)

@ -0,0 +1,4 @@
// 窥孔优化Peephole
// - 删除冗余 move、合并常见指令模式
// - 提升最终汇编质量(按实现范围裁剪)

@ -0,0 +1,4 @@
// 常量求值:
// - 处理数组维度、全局初始化、const 表达式等编译期可计算场景
// - 为语义分析与 IR 生成提供常量折叠/常量值信息

@ -0,0 +1,5 @@
// 语义分析主流程:
// - 符号解析与绑定、类型检查、控制流规则检查
// - 记录/插入必要的隐式转换(或在节点上标注)
// - 输出为“带类型 / 符号 / 常量信息”的 AST

@ -0,0 +1,4 @@
// 符号表与作用域管理:
// - 支持嵌套作用域(块/函数/全局)
// - 变量/函数/参数/常量的注册、查找与遮蔽规则

@ -0,0 +1,5 @@
// 命令行参数解析:
// - 解析输入/输出路径
// - 解析输出类型IR/MIR/ASM与优化级别等选项
// - 将参数传递给 main.cpp 的编译流水线驱动

@ -0,0 +1,4 @@
// 日志模块:
// - 统一输出调试信息、阶段信息与错误信息
// - 提供可配置的日志级别与输出位置(按需要实现)

@ -0,0 +1,4 @@
// SysY 运行库实现:
// - 按实验/评测规范提供 I/O 等函数实现
// - 与编译器生成的目标代码链接,支撑运行时行为

@ -0,0 +1,4 @@
// SysY 运行库头文件:
// - 声明运行库函数原型(供编译器生成 call 或链接阶段引用)
// - 与 sylib.c 配套,按规范逐步补齐声明

@ -0,0 +1,5 @@
# Bash 测试脚本:
# - 批量编译 test/test_case/ 下的 *.sy 用例
# - 将产物与日志写入 test/test_result/(例如 .ll/.s、运行输出、diff 结果)
# - 汇总通过/失败信息并给出统计
Loading…
Cancel
Save