# jurgenei/ast-classes-core architecture

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

- Interactive diagram: https://gitdiagram.com/jurgenei/ast-classes-core
- Repository: https://github.com/jurgenei/ast-classes-core

## Overview

This is a Java library that converts an ANTLR parse tree—or an already normalized grammar model—into an AST class model and can render that model as deterministic S-expression text. The main workflow is parse-tree mapping, grammar modeling, AST derivation, then optional serialization. The README documents the mapping interface but notes that a concrete ANTLR v4 mapper is not yet implemented; the graph therefore shows the interface without inventing an implementation. The serialization step is separate from the pipeline’s returned model.

Main entry points: [`src/main/java/name/jurgenei/ast/core/AstClassesPipeline.java`](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstClassesPipeline.java) (Pipeline API), [`src/main/java/name/jurgenei/ast/core/AstClassDeriver.java`](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstClassDeriver.java) (Class deriver), [`src/main/java/name/jurgenei/ast/core/model/GrammarModel.java`](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/GrammarModel.java) (Grammar model), [`src/main/java/name/jurgenei/ast/core/mapper/ParseTreeToGrammarModelMapper.java`](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/mapper/ParseTreeToGrammarModelMapper.java) (Parse-tree mapper)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Grammar Input"]
  node_pipeline["Pipeline API"]
  node_mapper["Parse-tree mapper"]
  node_grammar_model["Grammar model<br/>[GrammarModel.java]"]
  node_grammar_nodes["Grammar nodes<br/>[GrammarNode.java]"]
end

subgraph group_derive["AST Derivation"]
  node_deriver["Class deriver"]
  node_cardinality["Cardinality rules<br/>[Cardinality.java]"]
  node_ast_model["AST model<br/>[AstModel.java]"]
end

subgraph group_output["Model Output"]
  node_writer["S-expression writer"]
  node_sexpr["S-expression text"]
end

node_user(("Library caller"))
node_parse_tree["ANTLR parse tree"]

node_user -->|"calls"| node_pipeline
node_user -->|"provides"| node_parse_tree
node_pipeline -->|"invokes map"| node_mapper
node_mapper -->|"maps"| node_parse_tree
node_mapper -->|"produces"| node_grammar_model
node_pipeline -->|"accepts directly"| node_grammar_model
node_grammar_model -->|"contains"| node_grammar_nodes
node_pipeline -->|"invokes derive"| node_deriver
node_deriver -->|"reads"| node_grammar_model
node_deriver -->|"combines"| node_cardinality
node_deriver -->|"produces"| node_ast_model
node_pipeline -->|"returns"| node_ast_model
node_user -->|"calls"| node_writer
node_writer -->|"reads"| node_ast_model
node_writer -->|"renders"| node_sexpr

click node_pipeline "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstClassesPipeline.java"
click node_mapper "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/mapper/ParseTreeToGrammarModelMapper.java"
click node_grammar_model "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/GrammarModel.java"
click node_grammar_nodes "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/GrammarNode.java"
click node_deriver "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstClassDeriver.java"
click node_cardinality "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/Cardinality.java"
click node_ast_model "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/AstModel.java"
click node_writer "https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstSexprWriter.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_pipeline,node_mapper,node_grammar_model,node_grammar_nodes toneBlue
class node_deriver,node_cardinality,node_ast_model toneAmber
class node_writer,node_sexpr toneMint
class node_user,node_parse_tree toneIndigo
```

## Components

### Grammar Input

- [Pipeline API](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstClassesPipeline.java): `src/main/java/name/jurgenei/ast/core/AstClassesPipeline.java`
- [Parse-tree mapper](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/mapper/ParseTreeToGrammarModelMapper.java): `src/main/java/name/jurgenei/ast/core/mapper/ParseTreeToGrammarModelMapper.java`
- [Grammar model](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/GrammarModel.java): `src/main/java/name/jurgenei/ast/core/model/GrammarModel.java`
- [Grammar nodes](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/GrammarNode.java): `src/main/java/name/jurgenei/ast/core/model/GrammarNode.java`

### AST Derivation

- [Class deriver](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstClassDeriver.java): `src/main/java/name/jurgenei/ast/core/AstClassDeriver.java`
- [Cardinality rules](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/Cardinality.java): `src/main/java/name/jurgenei/ast/core/model/Cardinality.java`
- [AST model](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/model/AstModel.java): `src/main/java/name/jurgenei/ast/core/model/AstModel.java`

### Model Output

- [S-expression writer](https://github.com/jurgenei/ast-classes-core/blob/main/src/main/java/name/jurgenei/ast/core/AstSexprWriter.java): `src/main/java/name/jurgenei/ast/core/AstSexprWriter.java`
- **S-expression text**

### Other components

- **Library caller**
- **ANTLR parse tree**

## Connections

- Library caller → Pipeline API: calls
- Library caller → ANTLR parse tree: provides
- Pipeline API → Parse-tree mapper: invokes map
- Parse-tree mapper → ANTLR parse tree: maps
- Parse-tree mapper → Grammar model: produces
- Pipeline API → Grammar model: accepts directly
- Grammar model → Grammar nodes: contains
- Pipeline API → Class deriver: invokes derive
- Class deriver → Grammar model: reads
- Class deriver → Cardinality rules: combines
- Class deriver → AST model: produces
- Pipeline API → AST model: returns
- Library caller → S-expression writer: calls
- S-expression writer → AST model: reads
- S-expression writer → S-expression text: renders
