# tanggger/buaa_compiler architecture

> Architecture diagram of the GitHub repository tanggger/buaa_compiler, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tanggger/buaa_compiler
- Repository: https://github.com/tanggger/buaa_compiler

## Overview

This is a compiler for a C-like language that produces MIPS assembly. Its principal workflow is source input through lexing and parsing, semantic analysis and IR construction, optimization, then MIPS generation. The graph also shows symbol management, error reporting, and the IR-to-instruction layer. No README was provided; relationships are limited to source excerpts and SOURCE INDEX references, so some internal calls and output details are omitted.

Main entry points: [`src/Compiler.java`](https://github.com/tanggger/buaa_compiler/blob/main/src/Compiler.java) (Compiler driver), [`src/optimize/OptimizeManager.java`](https://github.com/tanggger/buaa_compiler/blob/main/src/optimize/OptimizeManager.java) (Optimization manager), [`src/backend/mips/MipsBuilder.java`](https://github.com/tanggger/buaa_compiler/blob/main/src/backend/mips/MipsBuilder.java) (MIPS lowering), [`src/midend/IrBuilder.java`](https://github.com/tanggger/buaa_compiler/blob/main/src/midend/IrBuilder.java) (IR builder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend"]
  node_lexer["Lexer<br/>[Lexer.java]"]
  node_parser["Parser<br/>[Parser.java]"]
  node_ast["AST<br/>[CompUnit.java]"]
end

subgraph group_analysis["Analysis and IR"]
  node_semantic["Semantic analysis"]
  node_symbols[("Symbol tables<br/>[SymbolTable.java]")]
  node_visitors["AST visitors"]
  node_irbuilder["IR builder<br/>[IrBuilder.java]"]
  node_ir["LLVM-like IR"]
end

subgraph group_optimization["Optimization"]
  node_optimizer["Optimization manager"]
  node_passes["IR optimization passes"]
  node_registeralloc["Register allocation"]
end

subgraph group_backend["MIPS Backend"]
  node_mipsbuilder["MIPS lowering<br/>[MipsBuilder.java]"]
  node_mipsmodule["MIPS module<br/>[MipsModule.java]"]
  node_mipsinstr["MIPS instructions"]
  node_peephole["Peephole optimization<br/>[PeepHole.java]"]
end

subgraph group_support["Compiler Support"]
  node_compiler["Compiler driver<br/>[Compiler.java]"]
  node_errors["Error recording<br/>[ErrorRecorder.java]"]
  node_output["Output handling<br/>[OutputHandler.java]"]
end

node_source(("Source code"))

node_source -->|"provides input"| node_compiler
node_compiler -->|"invokes"| node_lexer
node_compiler -->|"invokes"| node_parser
node_parser -->|"parses into"| node_ast
node_compiler -->|"invokes"| node_semantic
node_compiler -->|"invokes"| node_irbuilder
node_visitors -->|"uses"| node_irbuilder
node_irbuilder -->|"builds"| node_ir
node_compiler -->|"invokes"| node_optimizer
node_optimizer -->|"runs"| node_passes
node_optimizer -->|"runs"| node_registeralloc
node_compiler -->|"invokes"| node_mipsbuilder
node_mipsbuilder -->|"adds segments"| node_mipsmodule
node_mipsbuilder -->|"creates"| node_mipsinstr
node_compiler -->|"uses"| node_errors
node_compiler -->|"uses"| node_output
node_compiler -->|"invokes"| node_peephole
node_peephole -->|"rewrites"| node_mipsmodule

click node_compiler "https://github.com/tanggger/buaa_compiler/blob/main/src/Compiler.java"
click node_lexer "https://github.com/tanggger/buaa_compiler/blob/main/src/frontend/lexer/Lexer.java"
click node_parser "https://github.com/tanggger/buaa_compiler/blob/main/src/frontend/parser/Parser.java"
click node_ast "https://github.com/tanggger/buaa_compiler/blob/main/src/frontend/ast/CompUnit.java"
click node_semantic "https://github.com/tanggger/buaa_compiler/blob/main/src/midend/SemanticAnalyzer.java"
click node_symbols "https://github.com/tanggger/buaa_compiler/blob/main/src/midend/symbol/SymbolTable.java"
click node_visitors "https://github.com/tanggger/buaa_compiler/tree/main/src/midend/visit"
click node_irbuilder "https://github.com/tanggger/buaa_compiler/blob/main/src/midend/IrBuilder.java"
click node_ir "https://github.com/tanggger/buaa_compiler/tree/main/src/midend/llvm"
click node_optimizer "https://github.com/tanggger/buaa_compiler/blob/main/src/optimize/OptimizeManager.java"
click node_passes "https://github.com/tanggger/buaa_compiler/tree/main/src/optimize"
click node_registeralloc "https://github.com/tanggger/buaa_compiler/blob/main/src/optimize/AllocateRegister.java"
click node_mipsbuilder "https://github.com/tanggger/buaa_compiler/blob/main/src/backend/mips/MipsBuilder.java"
click node_mipsmodule "https://github.com/tanggger/buaa_compiler/blob/main/src/backend/mips/MipsModule.java"
click node_mipsinstr "https://github.com/tanggger/buaa_compiler/tree/main/src/backend/mips/assembly"
click node_peephole "https://github.com/tanggger/buaa_compiler/blob/main/src/backend/PeepHole.java"
click node_errors "https://github.com/tanggger/buaa_compiler/blob/main/src/error/ErrorRecorder.java"
click node_output "https://github.com/tanggger/buaa_compiler/blob/main/src/util/OutputHandler.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_lexer,node_parser,node_ast toneBlue
class node_semantic,node_symbols,node_visitors,node_irbuilder,node_ir toneAmber
class node_optimizer,node_passes,node_registeralloc toneMint
class node_mipsbuilder,node_mipsmodule,node_mipsinstr,node_peephole toneRose
class node_compiler,node_errors,node_output,node_source toneIndigo
```

## Components

### Frontend

- [Lexer](https://github.com/tanggger/buaa_compiler/blob/main/src/frontend/lexer/Lexer.java): `src/frontend/lexer/Lexer.java`
- [Parser](https://github.com/tanggger/buaa_compiler/blob/main/src/frontend/parser/Parser.java): `src/frontend/parser/Parser.java`
- [AST](https://github.com/tanggger/buaa_compiler/blob/main/src/frontend/ast/CompUnit.java): `src/frontend/ast/CompUnit.java`

### Analysis and IR

- [Semantic analysis](https://github.com/tanggger/buaa_compiler/blob/main/src/midend/SemanticAnalyzer.java): `src/midend/SemanticAnalyzer.java`
- [Symbol tables](https://github.com/tanggger/buaa_compiler/blob/main/src/midend/symbol/SymbolTable.java): `src/midend/symbol/SymbolTable.java`
- [AST visitors](https://github.com/tanggger/buaa_compiler/tree/main/src/midend/visit): `src/midend/visit`
- [IR builder](https://github.com/tanggger/buaa_compiler/blob/main/src/midend/IrBuilder.java): `src/midend/IrBuilder.java`
- [LLVM-like IR](https://github.com/tanggger/buaa_compiler/tree/main/src/midend/llvm): `src/midend/llvm`

### Optimization

- [Optimization manager](https://github.com/tanggger/buaa_compiler/blob/main/src/optimize/OptimizeManager.java): `src/optimize/OptimizeManager.java`
- [IR optimization passes](https://github.com/tanggger/buaa_compiler/tree/main/src/optimize): `src/optimize`
- [Register allocation](https://github.com/tanggger/buaa_compiler/blob/main/src/optimize/AllocateRegister.java): `src/optimize/AllocateRegister.java`

### MIPS Backend

- [MIPS lowering](https://github.com/tanggger/buaa_compiler/blob/main/src/backend/mips/MipsBuilder.java): `src/backend/mips/MipsBuilder.java`
- [MIPS module](https://github.com/tanggger/buaa_compiler/blob/main/src/backend/mips/MipsModule.java): `src/backend/mips/MipsModule.java`
- [MIPS instructions](https://github.com/tanggger/buaa_compiler/tree/main/src/backend/mips/assembly): `src/backend/mips/assembly`
- [Peephole optimization](https://github.com/tanggger/buaa_compiler/blob/main/src/backend/PeepHole.java): `src/backend/PeepHole.java`

### Compiler Support

- [Compiler driver](https://github.com/tanggger/buaa_compiler/blob/main/src/Compiler.java): `src/Compiler.java`
- [Error recording](https://github.com/tanggger/buaa_compiler/blob/main/src/error/ErrorRecorder.java): `src/error/ErrorRecorder.java`
- [Output handling](https://github.com/tanggger/buaa_compiler/blob/main/src/util/OutputHandler.java): `src/util/OutputHandler.java`

### Other components

- **Source code**

## Connections

- Source code → Compiler driver: provides input
- Compiler driver → Lexer: invokes (evidence: `src/Compiler.java`)
- Compiler driver → Parser: invokes (evidence: `src/Compiler.java`)
- Parser → AST: parses into (evidence: `src/frontend/parser/Parser.java`)
- Compiler driver → Semantic analysis: invokes (evidence: `src/Compiler.java`)
- Compiler driver → IR builder: invokes (evidence: `src/Compiler.java`)
- AST visitors → IR builder: uses (evidence: `src/midend/visit/VisitorExp.java`)
- IR builder → LLVM-like IR: builds (evidence: `src/midend/IrBuilder.java`)
- Compiler driver → Optimization manager: invokes (evidence: `src/Compiler.java`)
- Optimization manager → IR optimization passes: runs (evidence: `src/optimize/OptimizeManager.java`)
- Optimization manager → Register allocation: runs (evidence: `src/optimize/OptimizeManager.java`)
- Compiler driver → MIPS lowering: invokes (evidence: `src/Compiler.java`)
- MIPS lowering → MIPS module: adds segments (evidence: `src/backend/mips/MipsBuilder.java`)
- MIPS lowering → MIPS instructions: creates (evidence: `src/backend/mips/MipsBuilder.java`)
- Compiler driver → Error recording: uses (evidence: `src/Compiler.java`)
- Compiler driver → Output handling: uses (evidence: `src/Compiler.java`)
- Compiler driver → Peephole optimization: invokes (evidence: `src/Compiler.java`)
- Peephole optimization → MIPS module: rewrites (evidence: `src/backend/PeepHole.java`)
