Original file: pX/Common/iterator_engine.pl - fglock
TODO
- There are no tests yet for <before>, hashes, end_of_string
- It needs a 'direction' flag, in order to implement <after>.
- Quantified matches could use less stack space.
- Simplify arg list - the functions currently take 8 arguments.
- weaken self-referential things
A "rule" function gets as argument a list:
0 - the string to match 1 - an optional "continuation" 2 - the partially built match tree 3 - a leaf pointer in the match tree 4 - the grammar name 5 - pos #6 - the whole string to match 7 - argument list - <subrule($x,$y)>
it modifies argument #3 to a Match object:
bool - an "assertion" (true/false)
from - string pointer for start of this match
to - string pointer for next match (end+1)
match - positional submatches
named - named submatches
capture - return'ed things
state - a "continuation" or undef
abort - the match was stopped by a { return } or a fail(),
and it should not backtrack or whatever
A "ruleop" function gets some arguments and returns a "rule" funtion.
sub fail { return abort( sub { return { bool => \0 }; } ); };