From bbc18b6edd89ca3f73a29caa75f2fb586651ea0b Mon Sep 17 00:00:00 2001 From: zox <zox@mail.ustc.edu.cn> Date: Sat, 10 Aug 2024 21:28:03 +0800 Subject: [PATCH] update README.md --- README.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6fcf97d..6fcd4d9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,83 @@ -# 简介 +## 设计文档:segfault 编译器 -一个编译器实现,支æŒCè¯è¨€çš„å集。 \ No newline at end of file +### 概述 + +segfault 编译器是一款用于编译 SysY è¯è¨€ï¼ˆä¸€ç§ç®€åŒ–çš„ C-like è¯è¨€ï¼‰åˆ°ä½Žçº§ä»£ç 的工具。该编译器支æŒå¤šç§ä»£ç 优化和转æ¢é˜¶æ®µï¼Œå¯ç”Ÿæˆ LLVM IR 或汇编代ç 。 + +### 目录结构 + +以下是 SysYC 编译器的主è¦ç›®å½•和文件结构概述: + +- **`include/` å’Œ `src/`**: + - 这两个目录包å«äº†æ‰€æœ‰çš„å¤´æ–‡ä»¶å’Œæºæ–‡ä»¶ã€‚ + - `include/` å目录按模å—组织,如 `ADT/`, `codegen/`, `common/`, `lightir/`, å’Œ `passes/`。 + - `src/` 目录结构与 `include/` ä¿æŒä¸€è‡´ï¼Œæ¯ä¸ªå¤´æ–‡ä»¶å¤¹ä¸‹æœ‰å¯¹åº”的实现文件。 + +- **`docs/`**: + - åŒ…å«æ–‡æ¡£å’Œè®¾è®¡è¯´æ˜Žï¼Œä¾‹å¦‚ `how_init_val_works.py` 展示了åˆå§‹åŒ–夿‚高维数组的工作原ç†ã€‚ + +- **`tests/`**: + - åŒ…å«æµ‹è¯•脚本和测试用例。 + +### æ ¸å¿ƒç»„ä»¶ + +#### 1. æŠ½è±¡è¯æ³•æ ‘ï¼ˆAST) + +- **文件ä½ç½®**:`include/common/ast.hpp`, `src/common/ast.cpp` +- **æè¿°**:构建并维护è¯è¨€çš„æŠ½è±¡è¯æ³•æ ‘ï¼Œæ˜¯ç¼–è¯‘è¿‡ç¨‹çš„åˆæ¥é˜¶æ®µã€‚ + +#### 2. IR 构建 + +- **文件ä½ç½®**:`include/sysyc/sysyc_builder.hpp`, `src/sysyc/sysyc_builder.cpp` +- **æè¿°**:将 AST 转æ¢ä¸ºä¸é—´è¡¨ç¤ºï¼ˆIR),为åŽç»çš„优化和代ç ç”Ÿæˆæä¾›åŸºç¡€ã€‚ + +#### 3. ä¸é—´è¡¨ç¤ºï¼ˆIR) + +- **文件ä½ç½®**:`include/lightir/Module.hpp`, `src/lightir/Module.cpp` ç‰ +- **æè¿°**:定义和æ“作ä¸é—´ä»£ç 表示,为优化和代ç ç”Ÿæˆæä¾›åŸºç¡€ã€‚ + +#### 4. 代ç ç”Ÿæˆ + +- **文件ä½ç½®**:`include/codegen/`, `src/codegen/` +- **æè¿°**: + - å°† IR 转æ¢ä¸ºç›®æ ‡æœºå™¨ä»£ç 。 + - 包括寄å˜å™¨åˆ†é…ã€æŒ‡ä»¤é€‰æ‹©ã€æ´»æ€§åˆ†æžç‰å模å—。 + +#### 5. 优化 + +- **文件ä½ç½®**:`include/passes/`, `src/passes/` +- **æè¿°**: + - 实现å„ç§ä»£ç 优化技术,如常é‡ä¼ æ’ã€æ»ç åˆ é™¤ã€å¾ªçŽ¯ä¼˜åŒ–ç‰ã€‚ + - 通过 `PassManager` 管ç†ä¼˜åŒ–过程。 + +### 编译æµç¨‹ + +1. **è¯æ³•分æž**ï¼šè§£æž `.sy` 输入文件,构建 AST。 +2. **IR 构建**:`SysyBuilder` 类将 AST 转æ¢ä¸º IR。 +3. **优化**ï¼šæ ¹æ®å‘½ä»¤è¡ŒæŒ‡å®šçš„优化级别和优化通é“进行 IR 优化。 +4. **代ç 生æˆ**: + - å¦‚æžœæ˜¯ç”Ÿæˆ LLVM IR,直接输出。 + - å¦‚æžœæ˜¯ç”Ÿæˆæ±‡ç¼–代ç ,进一æ¥é€šè¿‡ `MachineModule` å’Œ `MachinePassManager` 处ç†ã€‚ +5. **输出结果**:将最终生æˆçš„代ç 写入输出文件。 + +### 构建和使用 + +使用 CMake 构建系统,å¯ä»¥é€šè¿‡ä»¥ä¸‹å‘½ä»¤åœ¨æ ¹ç›®å½•编译编译器: + +```bash +mkdir build +cd build +cmake .. +sudo make install +``` + +è¿è¡Œç¼–译器: + +```bash +compiler -O1 -emit-llvm example.sy -o example.ll +``` + +或者 +``` +compiler -O1 -S example.sy -o example.s +``` -- GitLab