Prefix table for the Knuth-Morris-Pratt matching algorithm
This is an array of the form t = [(x₀,n₀), (x₁,n₁), (x₂, n₂), ...] where for each i, nᵢ is
the length of the longest proper prefix of xs = [x₀,x₁,...,xᵢ] which is also a suffix of xs.
Validity condition to help with termination proofs
Instances For
Returns the size of the prefix table
Instances For
Transition function for the KMP matcher
Assuming we have an input xs with a suffix that matches the pattern prefix t.pattern[:len]
where len : Fin (t.size+1). Then xs.push x has a suffix that matches the pattern prefix
t.pattern[:t.step x len]. If len is as large as possible then t.step x len will also be
as large as possible.
Equations
Instances For
Extend a prefix table by one element
If t is the prefix table for xs then t.extend x is the prefix table for xs.push x.
Instances For
Make prefix table from a pattern array
Equations
- xs.mkPrefixTable = Array.foldl (fun (x : Array.PrefixTable α) => x.extend) default xs
Instances For
Make prefix table from a pattern stream
Equations
- Array.mkPrefixTableOfStream stream = Array.mkPrefixTableOfStream.loop default stream
Instances For
Inner loop for mkPrefixTableOfStream
KMP matcher structure
- table : PrefixTable α
Prefix table for the pattern
Current longest matching prefix
Instances For
Make a KMP matcher for a given pattern array
Equations
- Array.Matcher.ofArray pat = { table := pat.mkPrefixTable }
Instances For
Make a KMP matcher for a given a pattern stream
Equations
- Array.Matcher.ofStream pat = { table := Array.mkPrefixTableOfStream pat }
Instances For
Find next match from a given stream
Runs the stream until it reads a sequence that matches the sought pattern, then returns the stream state at that point and an updated matcher state.
Implementation datail for Matcher.Iterator.
Equations
- One or more equations did not get rendered due to their size.
- m.modifyStep it ⟨Std.Iterators.IterStep.done, property⟩ = Std.Iterators.IterStep.done
Instances For
Equations
- One or more equations did not get rendered due to their size.