Documentation for method
parse assembled from the following types:
method parse(, : = 'TOP', Capture() : = \(), Mu : = Mu, *)
$target, which will be coerced to Str if it isn't one, using
$rule as the starting rule. Additional
$args will be passed to the starting rule if provided.
say RepeatChar.parse('aaaaaa', :rule('start'), :args(\('a')));say RepeatChar.parse('bbbbbb', :rule('start'), :args(\('b')));# OUTPUT:# ｢aaaaaa｣# ｢bbbbbb｣
action named argument is provided, it will be used as an action object, that is, for each successful regex match, a method of the same name, if it exists, is called on the action object, passing the match object as the sole positional argument.
my = class ;grammar .parse('ab', :);# OUTPUT : «42␤7␤»
Additional named arguments are used as options for matching, so you can specify things like
:pos(4) to start parsing from the fourth (zero-base) character. All matching adverbs are allowed, but not all of them would take effort. There are several type of adverbs that a regex can have, Some of the apply at compile time, like
:i etc. You cannot pass those to
.parse, because the regexes have already been compiled. But, you can pass those adverbs that affect the runtime behavior, such as
:continue, are interpreted here.
say RepeatChar.parse('bbbbbb', :rule('start'), :args(\('b')), :pos(4)).Str;# OUTPUT : «bb␤»
parse only succeeds if the cursor has arrived at the end of the target string when the match is over. Use method subparse if you want to be able to stop in the middle.