Matcher for a sequence of patterns.
class sequence matcher[readonly value element type, covariant any value result type]
extends sequence pattern[element type]
implements matcher[element type, result type]
procedure[result type, readonly list[any value]] matcher procedure
sequence matcher(readonly list[pattern[element type]] patterns list, procedure[result type, readonly list[any value]] matcher procedure)
super(patterns list)
this • matcher procedure = matcher procedure
Parse the list and produce a result. Assumes this pattern matches the list.
implement result type parse(readonly list[element type] the list)
matches : base list[any value] • new()
var nonnegative index : 0
while index < patterns listsize
match : pattern elementmatch prefix(the listskip(prefix))
assert match is_not null
if pattern element is matcher
matcher element : pattern element !> matcher[element type, any value]
matchesappend(matcher elementparse(the listslice(prefix, prefix + match)))
else
matchesappend(missinginstance)
prefix += match
index += 1
assert prefix == the listsize
return matcher procedure(matches)