Coverage.CoverSourcetype ('g, 'lrc, 'enu) graph = | Graph : {enum : ('n, 'g Info.terminal) Enum._graph;position : 'n Fix.Indexing.index ->
('lrc, 'enu) Fix.Indexing.Sum.n Fix.Indexing.index;unaccepted : 'n Fix.Indexing.index -> 'g Info.terminal Utils.Misc.indexset;sinks : 'n Fix.Indexing.index list;} -> ('g, 'lrc, 'enu) graphComputes coverage by constructing a synchronized product of the user's error matching machine with the enumeration graph. States where the machine cannot handle the unaccepted lookaheads of the enumeration graph are identified as uncovered.
val coverage :
'g Info.grammar ->
('g, 'r) Spec.branches ->
('g, 'r, 'st, 'tr) Automata.Machine.t ->
('g, 'lrc) Automata.stacks ->
('g, 'lrc, 'ao) Andor._graph ->
('g, 'lrc, 'ao, 'en) Deter._graph ->
('g, 'lrc, 'en) graphCompute the coverage product graph. Each product state pairs a machine state with a position in the enumeration graph (either an LRC state or an Enum node). Unaccepted lookaheads are propagated through the product, filtered by the machine's accepting transitions and branch lookahead sets. Sink states with remaining unaccepted lookaheads are coverage gaps.