# gautamnsankar/crown-lang architecture

> Architecture diagram of the GitHub repository gautamnsankar/crown-lang, 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/gautamnsankar/crown-lang
- Repository: https://github.com/gautamnsankar/crown-lang

## Overview

CrownLang is a compiled, statically typed language. A programmer supplies a .cw program; the compiler reads and lexes it, parses an AST, expands imports, checks semantics, and generates an executable. The README highlights standard-library printing and math, while the tree also includes string and math library sources and a C++ runtime. The main driver’s stage calls are visible; some backend/runtime linkage details are not, so that connection is marked unverified.

Main entry points: [`include/classes/parser.hpp`](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/parser.hpp) (Parser), [`src/index.cpp`](https://github.com/gautamnsankar/crown-lang/blob/main/src/index.cpp) (Compiler Driver), [`include/classes/imports.hpp`](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/imports.hpp) (Import Resolver), [`include/classes/codegen.hpp`](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/codegen.hpp) (LLVM Generator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_front["Language Front End"]
  node_driver["Compiler Driver<br/>[index.cpp]"]
  node_lexer["Lexer<br/>[lexer.hpp]"]
  node_tokens["Tokens<br/>[token.hpp]"]
  node_constants["Lexical Constants<br/>[constants.hpp]"]
  node_parser["Parser<br/>[parser.hpp]"]
  node_ast["AST Model<br/>[ast.hpp]"]
  node_types["Type Definitions<br/>[type.hpp]"]
  node_imports["Import Resolver<br/>[imports.hpp]"]
end

subgraph group_analysis["Program Analysis"]
  node_semantics["Semantic Analyzer<br/>[semantics.hpp]"]
end

subgraph group_backend["Code Generation"]
  node_codegen["LLVM Generator<br/>[codegen.hpp]"]
end

subgraph group_library["Libraries And Runtime"]
  node_libraries["Language Libraries"]
  node_runtime["Native Runtime<br/>[runtime.cpp]"]
end

node_programmer(("Programmer"))
node_source["Crown Source"]
node_executable["Executable"]

node_programmer -->|"writes"| node_source
node_source -->|"supplies input"| node_driver
node_driver -->|"lexes source"| node_lexer
node_lexer -->|"uses definitions"| node_constants
node_lexer -->|"produces"| node_tokens
node_driver -->|"parses tokens"| node_parser
node_parser -->|"reads"| node_tokens
node_parser -->|"uses types"| node_types
node_parser -->|"builds"| node_ast
node_driver -->|"resolves imports"| node_imports
node_imports -->|"lexes imported files"| node_lexer
node_imports -->|"parses imported files"| node_parser
node_imports -->|"loads library files"| node_libraries
node_driver -->|"checks AST"| node_semantics
node_semantics -->|"uses parser definitions"| node_parser
node_driver -->|"generates executable"| node_codegen
node_codegen -->|"uses AST declarations"| node_parser
node_codegen -->|"writes output"| node_executable
node_codegen -.->|"links runtime"| node_runtime

click node_driver "https://github.com/gautamnsankar/crown-lang/blob/main/src/index.cpp"
click node_lexer "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/lexer.hpp"
click node_tokens "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/token.hpp"
click node_constants "https://github.com/gautamnsankar/crown-lang/blob/main/include/common/constants.hpp"
click node_parser "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/parser.hpp"
click node_ast "https://github.com/gautamnsankar/crown-lang/blob/main/include/common/ast.hpp"
click node_types "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/type.hpp"
click node_imports "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/imports.hpp"
click node_semantics "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/semantics.hpp"
click node_codegen "https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/codegen.hpp"
click node_libraries "https://github.com/gautamnsankar/crown-lang/tree/main/libs"
click node_runtime "https://github.com/gautamnsankar/crown-lang/blob/main/runtime/runtime.cpp"

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_tokens,node_constants,node_parser,node_ast,node_types,node_imports toneBlue
class node_semantics toneAmber
class node_codegen toneMint
class node_libraries,node_runtime toneRose
class node_programmer,node_source,node_executable toneIndigo
```

## Components

### Language Front End

- [Compiler Driver](https://github.com/gautamnsankar/crown-lang/blob/main/src/index.cpp): `src/index.cpp`
- [Lexer](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/lexer.hpp): `include/classes/lexer.hpp`
- [Tokens](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/token.hpp): `include/classes/token.hpp`
- [Lexical Constants](https://github.com/gautamnsankar/crown-lang/blob/main/include/common/constants.hpp): `include/common/constants.hpp`
- [Parser](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/parser.hpp): `include/classes/parser.hpp`
- [AST Model](https://github.com/gautamnsankar/crown-lang/blob/main/include/common/ast.hpp): `include/common/ast.hpp`
- [Type Definitions](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/type.hpp): `include/classes/type.hpp`
- [Import Resolver](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/imports.hpp): `include/classes/imports.hpp`

### Program Analysis

- [Semantic Analyzer](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/semantics.hpp): `include/classes/semantics.hpp`

### Code Generation

- [LLVM Generator](https://github.com/gautamnsankar/crown-lang/blob/main/include/classes/codegen.hpp): `include/classes/codegen.hpp`

### Libraries And Runtime

- [Language Libraries](https://github.com/gautamnsankar/crown-lang/tree/main/libs): `libs`
- [Native Runtime](https://github.com/gautamnsankar/crown-lang/blob/main/runtime/runtime.cpp): `runtime/runtime.cpp`

### Other components

- **Programmer**
- **Crown Source**
- **Executable**

## Connections

- Programmer → Crown Source: writes (evidence: `README.md`)
- Crown Source → Compiler Driver: supplies input (evidence: `src/index.cpp`)
- Compiler Driver → Lexer: lexes source (evidence: `src/index.cpp`)
- Lexer → Lexical Constants: uses definitions (evidence: `include/classes/lexer.hpp`)
- Lexer → Tokens: produces (evidence: `include/classes/lexer.hpp`)
- Compiler Driver → Parser: parses tokens (evidence: `src/index.cpp`)
- Parser → Tokens: reads (evidence: `include/classes/parser.hpp`)
- Parser → Type Definitions: uses types (evidence: `include/classes/parser.hpp`)
- Parser → AST Model: builds (evidence: `include/classes/parser.hpp`)
- Compiler Driver → Import Resolver: resolves imports (evidence: `src/index.cpp`)
- Import Resolver → Lexer: lexes imported files (evidence: `include/classes/imports.hpp`)
- Import Resolver → Parser: parses imported files (evidence: `include/classes/imports.hpp`)
- Import Resolver → Language Libraries: loads library files (evidence: `include/classes/imports.hpp`)
- Compiler Driver → Semantic Analyzer: checks AST (evidence: `src/index.cpp`)
- Semantic Analyzer → Parser: uses parser definitions (evidence: `include/classes/semantics.hpp`)
- Compiler Driver → LLVM Generator: generates executable (evidence: `src/index.cpp`)
- LLVM Generator → Parser: uses AST declarations (evidence: `include/classes/codegen.hpp`)
- LLVM Generator → Executable: writes output
- LLVM Generator → Native Runtime: links runtime
