# venkyjntu-git/compilerdesignlab_2026-27 architecture

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

- Interactive diagram: https://gitdiagram.com/venkyjntu-git/compilerdesignlab_2026-27
- Repository: https://github.com/venkyjntu-git/compilerdesignlab_2026-27

## Overview

This repository is a staged TinyCStr compiler-design lab: users run weekly Python compiler versions on source files to inspect tokens, parse into ASTs, check types, and produce three-address code or MIPS. The clearest end-to-end implementation is the Week 5–7 path; earlier weeks and practice examples provide smaller learning steps. The README also describes later control-flow, function, and optimization stages, but no corresponding later-week directories appear in the supplied tree. Connections below are limited to shown calls, imports, and documented scope.

Main entry points: [`Week5_Level2LexerParser_11_08_2026/Function.py`](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/Function.py) (Function model), [`Week6_Level2SemanticAnalyzer_18_08_2026/main.py`](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week6_Level2SemanticAnalyzer_18_08_2026/main.py) (Week 6 driver), [`Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py`](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py) (TinyCStr parser), [`Week7_Level2Codegenerator_01_09_2026/type_checker.py`](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week7_Level2Codegenerator_01_09_2026/type_checker.py) (Type checker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_front["Front end"]
  node_driver["Week 6 driver<br/>[main.py]"]
  node_lexer["TinyCStr lexer<br/>[tinycstr_lexer.py]"]
  node_parser["TinyCStr parser<br/>[tinycstr_parser.py]"]
  node_ast["AST nodes<br/>[ast_nodes.py]"]
end

subgraph group_semantic["Semantic model"]
  node_symtab["Symbol table<br/>[SymbolTable.py]"]
  node_function["Function model<br/>[Function.py]"]
  node_program["Program model<br/>[Program.py]"]
  node_checker["Type checker<br/>[type_checker.py]"]
  node_rules["Type rules<br/>[type_rules.py]"]
end

subgraph group_backend["Code generation"]
  node_tacgen["TAC generator<br/>[tac_generator.py]"]
  node_tac["Triple representation"]
  node_mips["MIPS generator<br/>[tac_to_mips.py]"]
end

subgraph group_learning["Learning examples"]
  node_roadmap["Later compiler stages<br/>[README.md]"]
  node_calculator["Calculator lexer<br/>[CalcLexer.py]"]
  node_exprlexer["Expression lexer<br/>[ExprAstLexer.py]"]
  node_exprparser["Expression parser<br/>[ExprAstParser.py]"]
  node_examples["TAC and MIPS exercises"]
end

node_user(("Compiler user"))

node_user -->|"invokes"| node_driver
node_driver -->|"tokenizes input"| node_lexer
node_driver -->|"parses tokens"| node_parser
node_parser -->|"builds nodes"| node_ast
node_parser -->|"records declarations"| node_symtab
node_parser -->|"creates functions"| node_function
node_parser -->|"creates program"| node_program
node_program -->|"dispatches stages"| node_function
node_driver -->|"checks types"| node_checker
node_checker -->|"checks and annotates"| node_ast
node_checker -->|"reads symbols"| node_symtab
node_checker -->|"applies rules"| node_rules
node_driver -->|"generates and compiles"| node_program
node_function -->|"generates TAC"| node_tacgen
node_function -->|"stores triples"| node_tac
node_function -->|"assigns offsets"| node_symtab
node_function -->|"generates assembly"| node_mips
node_tacgen -->|"walks AST"| node_ast
node_tacgen -->|"builds triples"| node_tac
node_user -.->|"tries lexer"| node_calculator
node_exprparser -->|"consumes tokens"| node_exprlexer
node_user -.->|"explores backend"| node_examples
node_roadmap -->|"documents roadmap"| node_user

click node_driver "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week6_Level2SemanticAnalyzer_18_08_2026/main.py"
click node_lexer "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tinycstr_lexer.py"
click node_parser "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py"
click node_ast "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/ast_nodes.py"
click node_symtab "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/SymbolTable.py"
click node_function "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/Function.py"
click node_program "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/Program.py"
click node_checker "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week7_Level2Codegenerator_01_09_2026/type_checker.py"
click node_rules "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week7_Level2Codegenerator_01_09_2026/type_rules.py"
click node_tacgen "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tac_generator.py"
click node_tac "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/three_address_code.py"
click node_mips "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tac_to_mips.py"
click node_roadmap "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/README.md"
click node_calculator "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week1_SlyPractice_18-07-2026/CalcLexer.py"
click node_exprlexer "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/practice_examples/2_practice_examples_ast/ExprAstLexer.py"
click node_exprparser "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/practice_examples/2_practice_examples_ast/ExprAstParser.py"
click node_examples "https://github.com/venkyjntu-git/compilerdesignlab_2026-27/tree/main/practice_examples/3_practice_examples_threeaddress_quadruple"

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_driver,node_lexer,node_parser,node_ast,node_user toneBlue
class node_symtab,node_function,node_program,node_checker,node_rules toneAmber
class node_tacgen,node_tac,node_mips toneMint
class node_roadmap,node_calculator,node_exprlexer,node_exprparser,node_examples toneRose
```

## Components

### Front end

- [Week 6 driver](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week6_Level2SemanticAnalyzer_18_08_2026/main.py): `Week6_Level2SemanticAnalyzer_18_08_2026/main.py`
- [TinyCStr lexer](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tinycstr_lexer.py): `Week5_Level2LexerParser_11_08_2026/tinycstr_lexer.py`
- [TinyCStr parser](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py): `Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py`
- [AST nodes](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/ast_nodes.py): `Week5_Level2LexerParser_11_08_2026/ast_nodes.py`

### Semantic model

- [Symbol table](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/SymbolTable.py): `Week5_Level2LexerParser_11_08_2026/SymbolTable.py`
- [Function model](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/Function.py): `Week5_Level2LexerParser_11_08_2026/Function.py`
- [Program model](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/Program.py): `Week5_Level2LexerParser_11_08_2026/Program.py`
- [Type checker](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week7_Level2Codegenerator_01_09_2026/type_checker.py): `Week7_Level2Codegenerator_01_09_2026/type_checker.py`
- [Type rules](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week7_Level2Codegenerator_01_09_2026/type_rules.py): `Week7_Level2Codegenerator_01_09_2026/type_rules.py`

### Code generation

- [TAC generator](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tac_generator.py): `Week5_Level2LexerParser_11_08_2026/tac_generator.py`
- [Triple representation](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/three_address_code.py): `Week5_Level2LexerParser_11_08_2026/three_address_code.py`
- [MIPS generator](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week5_Level2LexerParser_11_08_2026/tac_to_mips.py): `Week5_Level2LexerParser_11_08_2026/tac_to_mips.py`

### Learning examples

- [Later compiler stages](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/README.md): `README.md`
- [Calculator lexer](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/Week1_SlyPractice_18-07-2026/CalcLexer.py): `Week1_SlyPractice_18-07-2026/CalcLexer.py`
- [Expression lexer](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/practice_examples/2_practice_examples_ast/ExprAstLexer.py): `practice_examples/2_practice_examples_ast/ExprAstLexer.py`
- [Expression parser](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/blob/main/practice_examples/2_practice_examples_ast/ExprAstParser.py): `practice_examples/2_practice_examples_ast/ExprAstParser.py`
- [TAC and MIPS exercises](https://github.com/venkyjntu-git/compilerdesignlab_2026-27/tree/main/practice_examples/3_practice_examples_threeaddress_quadruple): `practice_examples/3_practice_examples_threeaddress_quadruple`

### Other components

- **Compiler user**

## Connections

- Compiler user → Week 6 driver: invokes (evidence: `Week6_Level2SemanticAnalyzer_18_08_2026/main.py`)
- Week 6 driver → TinyCStr lexer: tokenizes input (evidence: `Week6_Level2SemanticAnalyzer_18_08_2026/main.py`)
- Week 6 driver → TinyCStr parser: parses tokens (evidence: `Week6_Level2SemanticAnalyzer_18_08_2026/main.py`)
- TinyCStr parser → AST nodes: builds nodes (evidence: `Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py`)
- TinyCStr parser → Symbol table: records declarations (evidence: `Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py`)
- TinyCStr parser → Function model: creates functions (evidence: `Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py`)
- TinyCStr parser → Program model: creates program (evidence: `Week5_Level2LexerParser_11_08_2026/tinycstr_parser.py`)
- Program model → Function model: dispatches stages (evidence: `Week5_Level2LexerParser_11_08_2026/Program.py`)
- Week 6 driver → Type checker: checks types (evidence: `Week6_Level2SemanticAnalyzer_18_08_2026/main.py`)
- Type checker → AST nodes: checks and annotates (evidence: `Week7_Level2Codegenerator_01_09_2026/type_checker.py`)
- Type checker → Symbol table: reads symbols (evidence: `Week7_Level2Codegenerator_01_09_2026/type_checker.py`)
- Type checker → Type rules: applies rules (evidence: `Week7_Level2Codegenerator_01_09_2026/type_checker.py`)
- Week 6 driver → Program model: generates and compiles (evidence: `Week6_Level2SemanticAnalyzer_18_08_2026/main.py`)
- Function model → TAC generator: generates TAC (evidence: `Week5_Level2LexerParser_11_08_2026/Function.py`)
- Function model → Triple representation: stores triples (evidence: `Week5_Level2LexerParser_11_08_2026/Function.py`)
- Function model → Symbol table: assigns offsets (evidence: `Week5_Level2LexerParser_11_08_2026/Function.py`)
- Function model → MIPS generator: generates assembly (evidence: `Week5_Level2LexerParser_11_08_2026/Function.py`)
- TAC generator → AST nodes: walks AST (evidence: `Week5_Level2LexerParser_11_08_2026/tac_generator.py`)
- TAC generator → Triple representation: builds triples (evidence: `Week5_Level2LexerParser_11_08_2026/tac_generator.py`)
- Compiler user → Calculator lexer: tries lexer
- Expression parser → Expression lexer: consumes tokens (evidence: `practice_examples/2_practice_examples_ast/ExprAstParser.py`)
- Compiler user → TAC and MIPS exercises: explores backend
- Later compiler stages → Compiler user: documents roadmap (evidence: `README.md`)
