Aria: Grammar-Driven CFL Reachability
include/CFL/Aria/ and lib/CFL/Aria/ provide a compact CFL reachability
toolkit centered on explicit grammars, labeled graphs, and reusable solver
front-ends.
Location: include/CFL/Aria/, lib/CFL/Aria/
Main components:
Grammarparses grammars from text or files, tracks nullable symbols, and builds unary and binary production indices for fast lookup.CNFGrammarloads grammars and applies the STBDU normalization pipeline, including start, terminal, binarization, epsilon-removal, and unit-production transforms.LabeledGraphstores the reachability instance, supports text and DOT inputs, and exposes matrix/PAG-style loading modes plus label-indexed edge queries.CFLSolvercomputes classical CFL reachability closure and reports iteration and edge-growth statistics.SCSolverbuilds a set-constraint system over the same graph and grammar inputs and returns constraint-system statistics.SVFPortbridges Aria to Lotus IR analyses by encoding alias-constraint graphs and SVFG instances into labeled graphs and grammars.
Integration points:
AliasClientsupports may-alias and points-to style queries from encoded PAG or PEG constraint graphs.ValueFlowClientanswers reachability queries over encoded SVFG value-flow graphs.lib/CFL/Aria/CMakeLists.txtbuilds theCanaryAriaCFLlibrary target.tests/unit/CFL/AriaCFLTest.cppcovers grammar parsing, graph loading, classical solving, set-constraint solving, and CNF normalization.
See also CFL Reachability Components.