# josehokec/acer4cer architecture

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

- Interactive diagram: https://gitdiagram.com/josehokec/acer4cer
- Repository: https://github.com/josehokec/acer4cer

## Overview

This repository implements ACER, an indexed complex-event-recognition engine, with baseline query methods and separate Flink CEP examples. The main documented workflow defines an event schema and index, stores events, parses a query pattern and constraints, filters candidates through ACER, reads matching events, and evaluates matches with the NFA engine. The README establishes the workflow; the excerpts show query parsing, ACER filtering, NFA components, and Flink examples, but do not expose every call site, so uncertain internal wiring is omitted.

Main entry points: [`src/main/java/acer/ACER.java`](https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/ACER.java) (ACER index), [`src/main/java/common/StatementParser.java`](https://github.com/josehokec/acer4cer/blob/main/src/main/java/common/StatementParser.java) (Statement parser), [`src/main/java/automaton/NFA.java`](https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/NFA.java) (NFA matcher), [`src/main/java/pattern/QueryPattern.java`](https://github.com/josehokec/acer4cer/blob/main/src/main/java/pattern/QueryPattern.java) (Query patterns)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_query["Query Definition"]
  node_parser["Statement parser"]
  node_patterns["Query patterns<br/>[QueryPattern.java]"]
  node_constraints["Predicate constraints<br/>[Constraint.java]"]
  node_schema["Event schema<br/>[EventSchema.java]"]
end

subgraph group_engine["ACER Engine"]
  node_acer["ACER index<br/>[ACER.java]"]
  node_synopsis["Synopsis filtering<br/>[SynopsisTable.java]"]
  node_blocks["Index block layout"]
  node_pool["Index buffers<br/>[BufferPool.java]"]
  node_btree["B+ tree indexes"]
  node_compress["Index compression"]
end

subgraph group_storage["Event and Index Storage"]
  node_store[("Event store<br/>[EventStore.java]")]
  node_rid["Record identifiers<br/>[RID.java]"]
end

subgraph group_matching["Match Evaluation"]
  node_nfa["NFA matcher<br/>[NFA.java]"]
  node_state["Automaton states<br/>[State.java]"]
  node_partial["Partial matches<br/>[PartialMatch.java]"]
end

subgraph group_integrations["Alternatives and Flink"]
  node_baseline["Baseline indexes<br/>[Index.java]"]
  node_flink["Flink CEP queries"]
  node_flinkengine["Flink CEP engine"]
end

node_user(("Query user"))
node_events["Event data"]
node_result["Match results"]

node_user -->|"submits statement"| node_parser
node_events -->|"indexes events"| node_acer
node_parser -->|"defines schema"| node_schema
node_parser -->|"creates index"| node_acer
node_parser -->|"parses pattern"| node_patterns
node_parser -->|"parses predicates"| node_constraints
node_patterns -->|"query parameters"| node_acer
node_constraints -->|"filter predicates"| node_acer
node_acer -->|"checks summaries"| node_synopsis
node_acer -->|"locates blocks"| node_blocks
node_acer -->|"uses buffers"| node_pool
node_acer -->|"queries index"| node_btree
node_acer -->|"compresses blocks"| node_compress
node_acer -->|"reads events"| node_store
node_acer -->|"returns event references"| node_rid
node_acer -->|"evaluates candidates"| node_nfa
node_nfa -->|"traverses states"| node_state
node_nfa -->|"tracks matches"| node_partial
node_nfa -->|"produces matches"| node_result
node_parser -.->|"selects alternative"| node_baseline
node_events -.->|"provides events"| node_flink
node_flink -.->|"submits CEP pattern"| node_flinkengine
node_flinkengine -.->|"emits matches"| node_result

click node_parser "https://github.com/josehokec/acer4cer/blob/main/src/main/java/common/StatementParser.java"
click node_patterns "https://github.com/josehokec/acer4cer/blob/main/src/main/java/pattern/QueryPattern.java"
click node_constraints "https://github.com/josehokec/acer4cer/blob/main/src/main/java/condition/Constraint.java"
click node_schema "https://github.com/josehokec/acer4cer/blob/main/src/main/java/common/EventSchema.java"
click node_acer "https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/ACER.java"
click node_synopsis "https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/SynopsisTable.java"
click node_blocks "https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/IdxBlkMetaInfo.java"
click node_pool "https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/BufferPool.java"
click node_btree "https://github.com/josehokec/acer4cer/blob/main/src/main/java/btree/BPlusTreeInterface.java"
click node_compress "https://github.com/josehokec/acer4cer/blob/main/src/main/java/compressor/CompressorAlgorithm.java"
click node_store "https://github.com/josehokec/acer4cer/blob/main/src/main/java/store/EventStore.java"
click node_rid "https://github.com/josehokec/acer4cer/blob/main/src/main/java/store/RID.java"
click node_nfa "https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/NFA.java"
click node_state "https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/State.java"
click node_partial "https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/PartialMatch.java"
click node_baseline "https://github.com/josehokec/acer4cer/blob/main/src/main/java/baselines/Index.java"
click node_flink "https://github.com/josehokec/acer4cer/blob/main/src/main/java/systems/StockPatternQuery.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_parser,node_patterns,node_constraints,node_schema,node_user toneBlue
class node_acer,node_synopsis,node_blocks,node_pool,node_btree,node_compress toneAmber
class node_store,node_rid toneMint
class node_nfa,node_state,node_partial toneRose
class node_baseline,node_flink,node_flinkengine,node_events,node_result toneIndigo
```

## Components

### Query Definition

- [Statement parser](https://github.com/josehokec/acer4cer/blob/main/src/main/java/common/StatementParser.java): `src/main/java/common/StatementParser.java`
- [Query patterns](https://github.com/josehokec/acer4cer/blob/main/src/main/java/pattern/QueryPattern.java): `src/main/java/pattern/QueryPattern.java`
- [Predicate constraints](https://github.com/josehokec/acer4cer/blob/main/src/main/java/condition/Constraint.java): `src/main/java/condition/Constraint.java`
- [Event schema](https://github.com/josehokec/acer4cer/blob/main/src/main/java/common/EventSchema.java): `src/main/java/common/EventSchema.java`

### ACER Engine

- [ACER index](https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/ACER.java): `src/main/java/acer/ACER.java`
- [Synopsis filtering](https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/SynopsisTable.java): `src/main/java/acer/SynopsisTable.java`
- [Index block layout](https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/IdxBlkMetaInfo.java): `src/main/java/acer/IdxBlkMetaInfo.java`
- [Index buffers](https://github.com/josehokec/acer4cer/blob/main/src/main/java/acer/BufferPool.java): `src/main/java/acer/BufferPool.java`
- [B+ tree indexes](https://github.com/josehokec/acer4cer/blob/main/src/main/java/btree/BPlusTreeInterface.java): `src/main/java/btree/BPlusTreeInterface.java`
- [Index compression](https://github.com/josehokec/acer4cer/blob/main/src/main/java/compressor/CompressorAlgorithm.java): `src/main/java/compressor/CompressorAlgorithm.java`

### Event and Index Storage

- [Event store](https://github.com/josehokec/acer4cer/blob/main/src/main/java/store/EventStore.java): `src/main/java/store/EventStore.java`
- [Record identifiers](https://github.com/josehokec/acer4cer/blob/main/src/main/java/store/RID.java): `src/main/java/store/RID.java`

### Match Evaluation

- [NFA matcher](https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/NFA.java): `src/main/java/automaton/NFA.java`
- [Automaton states](https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/State.java): `src/main/java/automaton/State.java`
- [Partial matches](https://github.com/josehokec/acer4cer/blob/main/src/main/java/automaton/PartialMatch.java): `src/main/java/automaton/PartialMatch.java`

### Alternatives and Flink

- [Baseline indexes](https://github.com/josehokec/acer4cer/blob/main/src/main/java/baselines/Index.java): `src/main/java/baselines/Index.java`
- [Flink CEP queries](https://github.com/josehokec/acer4cer/blob/main/src/main/java/systems/StockPatternQuery.java): `src/main/java/systems/StockPatternQuery.java`
- **Flink CEP engine**

### Other components

- **Query user**
- **Event data**
- **Match results**

## Connections

- Query user → Statement parser: submits statement
- Event data → ACER index: indexes events
- Statement parser → Event schema: defines schema
- Statement parser → ACER index: creates index
- Statement parser → Query patterns: parses pattern
- Statement parser → Predicate constraints: parses predicates
- Query patterns → ACER index: query parameters
- Predicate constraints → ACER index: filter predicates
- ACER index → Synopsis filtering: checks summaries
- ACER index → Index block layout: locates blocks
- ACER index → Index buffers: uses buffers
- ACER index → B+ tree indexes: queries index
- ACER index → Index compression: compresses blocks
- ACER index → Event store: reads events
- ACER index → Record identifiers: returns event references
- ACER index → NFA matcher: evaluates candidates
- NFA matcher → Automaton states: traverses states
- NFA matcher → Partial matches: tracks matches
- NFA matcher → Match results: produces matches
- Statement parser → Baseline indexes: selects alternative
- Event data → Flink CEP queries: provides events
- Flink CEP queries → Flink CEP engine: submits CEP pattern
- Flink CEP engine → Match results: emits matches
