CFL Reachability Components
This page lists the CFL reachability subsystems, their source locations, and the reachability guarantee each one provides.
Classical CFL Reachability
Grammar-driven CFL reachability utilities and solver backends
Location: include/CFL/Classical/, lib/CFL/Classical/. Both trees
use Core/, Solvers/Engines/ (including PEARL/, POCR/,
SQID/, STG/, Skewed/, EndpointQuotient/, CAT/,
IEOCE/, and CERT/), Solvers/Preprocessing/, Clients/Alias/,
and Clients/ValueFlow/.
The two client implementations consistently use AliasClient.* and
ValueFlowClient.* filenames.
Features:
One canonical grammar parser with EBNF expansion and binary normalization
Labeled graph construction for text, DOT, PAG, and PEG-style encodings
Solver backends selected by the classical driver: sparse-set, sparse-bitvector, Graspan epoch/delta, transitive-specialized, POCR/hierarchical-POCR, and fully ordered edge-critical-graph
PEARL multi-derivation, Sqid relation chaining, Stg staged solving, and CERT-CFL cardinality-certified solving
Native POCR grammar/graph input, unidirectional summarization, client graph simplification, and RSM-guided foldability checking
Incremental solver sessions for dynamically discovered terminal edges
Adapters for Lotus AserPTA constraint graphs and Lotus SVFG value flow
End-to-end LLVM bitcode alias analysis with CFL-driven indirect calls
End-to-end context-sensitive LLVM value-flow analysis over Lotus SVFGs
Strong-update-aware CFL preparation for Lotus SVFGs
See PEARL Multi-Derivation, Stg Staged Solving, and Sqid Efficient Relation Chaining for paper references, key ideas, algorithm walkthroughs, and exact source mappings. See CAT and IEOCE Engines for the CAT and IEOCE engines. See CERT-CFL: Cardinality-Certified Exact Solving for the CERT-CFL engine.
Dynamic Bidirected Dyck Reachability
Exact single-language Dyck reachability under insertions and deletions of complementary edge pairs. The POPL 2022 C++ algorithm retains degree-based merging, path compression, linked worklists, and acyclic splitting. Cyclic deletion safely recomputes the remaining graph.
Location: include/CFL/DynamicDyck/, lib/CFL/DynamicDyck/
See Dynamic Bidirected Dyck Reachability for the reusable API, artifact formats, and cycle-correction details.
Interleaved-Dyck Core
Shared typed Label, Edge, Graph, and Pair types plus the DOT
parser used by interleaved-Dyck benchmark datasets.
Location: include/CFL/InterleavedDyck/Core/,
lib/CFL/InterleavedDyck/Core/
StagedBounds consumes this graph directly, Unary applies unary projection, and MCFL converts it through a typed-to-generic adapter.
Exact Unary Interleaved Dyck
Exact component reachability for bidirected unary
D1-interleaved-D1. The module provides adaptive counter flattening and
the POPL 2022 fixed-counter exact baseline.
Location: include/CFL/InterleavedDyck/Unary/,
lib/CFL/InterleavedDyck/Unary/
See Exact Unary Interleaved Dyck for both algorithms, their exactness boundary, and benchmark eligibility rules.
Interleaved-Dyck Staged Bounds
Staged under- and overapproximation for reachability under two interleaved families of Dyck constraints.
Location: include/CFL/InterleavedDyck/StagedBounds/,
lib/CFL/InterleavedDyck/StagedBounds/
This component computes a certified union-Dyck lower bound and progressively tighter projected-CFL upper bounds; it is not an exact solver for the general typed problem.
Features:
DOT parsing for parenthesis, bracket, and neutral edges
Dyck-over-the-union underapproximation
Projected-language intersection and derivation-tracing mutual refinement
Stronger parity grammar and pairwise on-demand refinement
Taint and value-flow benchmark modes
Multiple Context-Free Language Reachability
All-pairs reachability for non-deleting, non-permuting MCFGs and the POPL 2025 typed underapproximation hierarchy.
Location: include/CFL/InterleavedDyck/MCFL/, lib/CFL/InterleavedDyck/MCFL/
Features:
All five normal-form MCFL rule types with structural validation
Indexed worklist saturation and tuple reachability pruning
Concrete path witnesses from retained derivation DAGs
G_d^circandG_d^+grammar generation for arbitrary dimensionsDimension-ordered condensation, DOT input, and command-line tool
Adapter from the shared typed interleaved-Dyck graph
Guarantee Summary
API |
Intended use |
Guarantee |
|---|---|---|
|
Proven typed pairs through |
Underapproximation |
|
POPL 2022 exact fixed-counter baseline |
Exact component partition |
|
Bidirected unary projection |
Exact component partition |
|
Typed lower/upper refinement |
Approximation bounds |
CSIndex (Context-Sensitive Indexing)
Precomputed summaries and reachability indexes that answer context-sensitive queries without re-running the base solver.
Location: include/CFL/CSIndex/, lib/CFL/CSIndex/
The implementation is split into FLARE and SCS. FLARE owns the
extended-Dyck graph and indexing algorithms; SCS builds policy products and
then reuses FLARE. See Context-Sensitive Reachability Indexing for the public namespaces and directory
layout.
Components:
FLARE path-tree, Grail, and tabulation indexes over an extended-Dyck graph
SCS sanitizer-aware product index with optional witness replay
Point queries, fixed-batch queries, and construction/query statistics
Interleaved-Dyck Graph Reduction
PLDI 2020 interleaved-Dyck graph simplification. This component transforms a DOT graph and does not itself return the final reachability relation.
Location: lib/CFL/InterleavedDyck/GraphReduction/
Features:
Two-color summary construction and degree-based node merging
Iterative Python orchestration until no further edge is removed
Explicit directed versus already-bidirected input mode
Summary representation kept internal to the
libsubtree
See also Classical Grammar-Driven CFL Reachability, Context-Sensitive Reachability Indexing, Exact Unary Interleaved Dyck, Interleaved-Dyck Staged Bounds, Interleaved-Dyck Graph Reduction, Multiple Context-Free Language Reachability.