# terminal-js/cmsc124-terminal-js architecture

> Architecture diagram of the GitHub repository terminal-js/cmsc124-terminal-js, 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/terminal-js/cmsc124-terminal-js
- Repository: https://github.com/terminal-js/cmsc124-terminal-js

## Overview

SukiScript is a Rust language front end with a command-line tokenization path and an expression-parsing path. A user supplies a file or enters expressions interactively; the CLI scans source, and the parse path passes tokens to a precedence-based parser before printing the resulting AST. The README documents commerce-oriented language constructs, but the sampled parser currently handles expressions only, and file execution is a placeholder. The graph reflects the implemented paths; it does not imply evaluation or execution features that are not shown.

Main entry points: [`src/main.rs`](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/main.rs) (CLI dispatch), [`src/parser.rs`](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/parser.rs) (Expression parser), [`src/scanner.rs`](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/scanner.rs) (Source scanner), [`src/token.rs`](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/token.rs) (Token records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI workflow"]
  node_cli["CLI dispatch<br/>[main.rs]"]
end

subgraph group_lex["Lexical layer"]
  node_scanner["Source scanner<br/>[scanner.rs]"]
  node_token["Token records<br/>[token.rs]"]
  node_types["Token types<br/>[token_type.rs]"]
end

subgraph group_parse["Expression parsing"]
  node_parser["Expression parser<br/>[parser.rs]"]
  node_expr["Expression AST<br/>[expr.rs]"]
  node_printer["AST printer<br/>[print_ast.rs]"]
end

node_user(("User"))

node_user -->|"provides input"| node_cli
node_cli -->|"scans source"| node_scanner
node_scanner -->|"creates tokens"| node_token
node_scanner -->|"classifies lexemes"| node_types
node_token -->|"stores type"| node_types
node_cli -->|"parses tokens"| node_parser
node_parser -->|"reads tokens"| node_token
node_parser -->|"matches kinds"| node_types
node_parser -->|"builds AST"| node_expr
node_cli -->|"prints AST"| node_printer
node_printer -->|"formats tree"| node_expr

click node_cli "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/main.rs"
click node_scanner "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/scanner.rs"
click node_token "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/token.rs"
click node_types "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/token_type.rs"
click node_parser "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/parser.rs"
click node_expr "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/expr.rs"
click node_printer "https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/print_ast.rs"

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_cli,node_user toneBlue
class node_scanner,node_token,node_types toneAmber
class node_parser,node_expr,node_printer toneMint
```

## Components

### CLI workflow

- [CLI dispatch](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/main.rs): `src/main.rs`

### Lexical layer

- [Source scanner](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/scanner.rs): `src/scanner.rs`
- [Token records](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/token.rs): `src/token.rs`
- [Token types](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/token_type.rs): `src/token_type.rs`

### Expression parsing

- [Expression parser](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/parser.rs): `src/parser.rs`
- [Expression AST](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/expr.rs): `src/expr.rs`
- [AST printer](https://github.com/terminal-js/cmsc124-terminal-js/blob/main/src/print_ast.rs): `src/print_ast.rs`

### Other components

- **User**

## Connections

- User → CLI dispatch: provides input (evidence: `README.md`)
- CLI dispatch → Source scanner: scans source (evidence: `src/main.rs`)
- Source scanner → Token records: creates tokens (evidence: `src/scanner.rs`)
- Source scanner → Token types: classifies lexemes (evidence: `src/scanner.rs`)
- Token records → Token types: stores type (evidence: `src/token.rs`)
- CLI dispatch → Expression parser: parses tokens (evidence: `src/main.rs`)
- Expression parser → Token records: reads tokens (evidence: `src/parser.rs`)
- Expression parser → Token types: matches kinds (evidence: `src/parser.rs`)
- Expression parser → Expression AST: builds AST (evidence: `src/parser.rs`)
- CLI dispatch → AST printer: prints AST (evidence: `src/main.rs`)
- AST printer → Expression AST: formats tree (evidence: `src/print_ast.rs`)
