# dmitrysoshnikov/regexp-tree architecture

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

- Interactive diagram: https://gitdiagram.com/dmitrysoshnikov/regexp-tree
- Repository: https://github.com/dmitrysoshnikov/regexp-tree

## Overview

regexp-tree is a JavaScript regular-expression processor. Its principal workflow accepts a pattern, parses it into an AST, then lets callers traverse or transform that AST and generate a pattern or RegExp. Separate APIs optimize patterns, transpile newer syntax for compatibility, and interpret patterns using finite automata. The graph preserves these distinct capabilities and the AST path-mutation layer. Some connections are supported by the SOURCE INDEX rather than excerpts; unsampled internals are not assumed to have been inspected.

Main entry points: [`src/regexp-tree.js`](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/regexp-tree.js) (Public API), [`src/transform/index.js`](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/transform/index.js) (Transform API), [`src/interpreter/finite-automaton/index.js`](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/index.js) (Automaton API), [`src/optimizer/index.js`](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/optimizer/index.js) (Optimizer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ast["AST Processing"]
  node_api["Public API<br/>[regexp-tree.js]"]
  node_parser["Regex parser<br/>[index.js]"]
  node_traversal["AST traversal<br/>[index.js]"]
  node_nodepath["AST node paths<br/>[node-path.js]"]
  node_transform["Transform API<br/>[index.js]"]
  node_result["Transform result<br/>[index.js]"]
  node_generator["Pattern generator<br/>[index.js]"]
end

subgraph group_rewrite["Pattern Rewriting"]
  node_optimizer["Optimizer<br/>[index.js]"]
  node_opttransforms["Optimization transforms"]
end

subgraph group_compat["Compatibility"]
  node_compat["Compat transpiler<br/>[index.js]"]
  node_compatransforms["Compat transforms<br/>[index.js]"]
  node_runtime["Compat runtime<br/>[index.js]"]
end

subgraph group_automata["Finite Automata"]
  node_fa["Automaton API<br/>[index.js]"]
  node_nfaexpr["Regex-to-NFA<br/>[nfa-from-regexp.js]"]
  node_nfabuild["NFA builders<br/>[builders.js]"]
  node_nfa["NFA execution<br/>[nfa.js]"]
  node_nfastate["NFA states<br/>[nfa-state.js]"]
  node_dfa["DFA<br/>[dfa.js]"]
  node_minimizer["DFA minimizer<br/>[dfa-minimizer.js]"]
end

node_caller(("Library caller"))

node_caller -->|"calls"| node_api
node_api -->|"parses patterns"| node_parser
node_api -->|"traverses AST"| node_traversal
node_api -->|"transforms patterns"| node_transform
node_api -->|"generates patterns"| node_generator
node_api -->|"optimizes patterns"| node_optimizer
node_api -->|"transpiles syntax"| node_compat
node_api -->|"exposes automata"| node_fa
node_traversal -->|"creates paths"| node_nodepath
node_transform -->|"parses strings"| node_parser
node_transform -->|"applies handlers"| node_traversal
node_transform -->|"returns result"| node_result
node_result -->|"generates output"| node_generator
node_optimizer -->|"parses strings"| node_parser
node_optimizer -->|"applies transforms"| node_transform
node_optimizer -->|"selects transforms"| node_opttransforms
node_compat -->|"selects transforms"| node_compatransforms
node_compat -->|"applies handlers"| node_transform
node_api -->|"uses named groups"| node_runtime
node_fa -->|"builds NFAs"| node_nfaexpr
node_fa -->|"uses builders"| node_nfabuild
node_fa -->|"exposes NFA"| node_nfa
node_fa -->|"exposes DFA"| node_dfa
node_nfaexpr -->|"parses pattern"| node_parser
node_nfaexpr -->|"constructs fragments"| node_nfabuild
node_nfabuild -->|"creates automata"| node_nfa
node_nfabuild -->|"creates states"| node_nfastate
node_dfa -->|"minimizes states"| node_minimizer

click node_api "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/regexp-tree.js"
click node_parser "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/parser/index.js"
click node_traversal "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/traverse/index.js"
click node_nodepath "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/traverse/node-path.js"
click node_transform "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/transform/index.js"
click node_result "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/transform/index.js"
click node_generator "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/generator/index.js"
click node_optimizer "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/optimizer/index.js"
click node_opttransforms "https://github.com/dmitrysoshnikov/regexp-tree/tree/master/src/optimizer/transforms"
click node_compat "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/compat-transpiler/index.js"
click node_compatransforms "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/compat-transpiler/transforms/index.js"
click node_runtime "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/compat-transpiler/runtime/index.js"
click node_fa "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/index.js"
click node_nfaexpr "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/nfa-from-regexp.js"
click node_nfabuild "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/builders.js"
click node_nfa "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/nfa.js"
click node_nfastate "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/nfa-state.js"
click node_dfa "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/dfa/dfa.js"
click node_minimizer "https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/dfa/dfa-minimizer.js"

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_api,node_parser,node_traversal,node_nodepath,node_transform,node_result,node_generator toneBlue
class node_optimizer,node_opttransforms toneAmber
class node_compat,node_compatransforms,node_runtime toneMint
class node_fa,node_nfaexpr,node_nfabuild,node_nfa,node_nfastate,node_dfa,node_minimizer toneRose
class node_caller toneIndigo
```

## Components

### AST Processing

- [Public API](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/regexp-tree.js): `src/regexp-tree.js`
- [Regex parser](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/parser/index.js): `src/parser/index.js`
- [AST traversal](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/traverse/index.js): `src/traverse/index.js`
- [AST node paths](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/traverse/node-path.js): `src/traverse/node-path.js`
- [Transform API](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/transform/index.js): `src/transform/index.js`
- [Transform result](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/transform/index.js): `src/transform/index.js`
- [Pattern generator](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/generator/index.js): `src/generator/index.js`

### Pattern Rewriting

- [Optimizer](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/optimizer/index.js): `src/optimizer/index.js`
- [Optimization transforms](https://github.com/dmitrysoshnikov/regexp-tree/tree/master/src/optimizer/transforms): `src/optimizer/transforms`

### Compatibility

- [Compat transpiler](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/compat-transpiler/index.js): `src/compat-transpiler/index.js`
- [Compat transforms](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/compat-transpiler/transforms/index.js): `src/compat-transpiler/transforms/index.js`
- [Compat runtime](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/compat-transpiler/runtime/index.js): `src/compat-transpiler/runtime/index.js`

### Finite Automata

- [Automaton API](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/index.js): `src/interpreter/finite-automaton/index.js`
- [Regex-to-NFA](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/nfa-from-regexp.js): `src/interpreter/finite-automaton/nfa/nfa-from-regexp.js`
- [NFA builders](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/builders.js): `src/interpreter/finite-automaton/nfa/builders.js`
- [NFA execution](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/nfa.js): `src/interpreter/finite-automaton/nfa/nfa.js`
- [NFA states](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/nfa/nfa-state.js): `src/interpreter/finite-automaton/nfa/nfa-state.js`
- [DFA](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/dfa/dfa.js): `src/interpreter/finite-automaton/dfa/dfa.js`
- [DFA minimizer](https://github.com/dmitrysoshnikov/regexp-tree/blob/master/src/interpreter/finite-automaton/dfa/dfa-minimizer.js): `src/interpreter/finite-automaton/dfa/dfa-minimizer.js`

### Other components

- **Library caller**

## Connections

- Library caller → Public API: calls (evidence: `src/regexp-tree.js`)
- Public API → Regex parser: parses patterns (evidence: `src/regexp-tree.js`)
- Public API → AST traversal: traverses AST (evidence: `src/regexp-tree.js`)
- Public API → Transform API: transforms patterns (evidence: `src/regexp-tree.js`)
- Public API → Pattern generator: generates patterns (evidence: `src/regexp-tree.js`)
- Public API → Optimizer: optimizes patterns (evidence: `src/regexp-tree.js`)
- Public API → Compat transpiler: transpiles syntax (evidence: `src/regexp-tree.js`)
- Public API → Automaton API: exposes automata (evidence: `src/regexp-tree.js`)
- AST traversal → AST node paths: creates paths (evidence: `src/traverse/index.js`)
- Transform API → Regex parser: parses strings (evidence: `src/transform/index.js`)
- Transform API → AST traversal: applies handlers (evidence: `src/transform/index.js`)
- Transform API → Transform result: returns result (evidence: `src/transform/index.js`)
- Transform result → Pattern generator: generates output (evidence: `src/transform/index.js`)
- Optimizer → Regex parser: parses strings (evidence: `src/optimizer/index.js`)
- Optimizer → Transform API: applies transforms (evidence: `src/optimizer/index.js`)
- Optimizer → Optimization transforms: selects transforms (evidence: `src/optimizer/index.js`)
- Compat transpiler → Compat transforms: selects transforms (evidence: `src/compat-transpiler/index.js`)
- Compat transpiler → Transform API: applies handlers (evidence: `src/compat-transpiler/index.js`)
- Public API → Compat runtime: uses named groups (evidence: `src/regexp-tree.js`)
- Automaton API → Regex-to-NFA: builds NFAs (evidence: `src/interpreter/finite-automaton/index.js`)
- Automaton API → NFA builders: uses builders (evidence: `src/interpreter/finite-automaton/index.js`)
- Automaton API → NFA execution: exposes NFA (evidence: `src/interpreter/finite-automaton/index.js`)
- Automaton API → DFA: exposes DFA (evidence: `src/interpreter/finite-automaton/index.js`)
- Regex-to-NFA → Regex parser: parses pattern (evidence: `src/interpreter/finite-automaton/nfa/nfa-from-regexp.js`)
- Regex-to-NFA → NFA builders: constructs fragments (evidence: `src/interpreter/finite-automaton/nfa/nfa-from-regexp.js`)
- NFA builders → NFA execution: creates automata (evidence: `src/interpreter/finite-automaton/nfa/builders.js`)
- NFA builders → NFA states: creates states (evidence: `src/interpreter/finite-automaton/nfa/builders.js`)
- DFA → DFA minimizer: minimizes states (evidence: `src/interpreter/finite-automaton/dfa/dfa.js`)
