method parse
Documentation for method parse
assembled from the following types:
class Grammar
From Grammar
(Grammar) method parse
Defined as:
method parse(, : = 'TOP', Capture() : = \(), Mu : = Mu, *)
Parses the $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」
If the 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 : «427»
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 take effect. There are several types of adverbs that a regex can have, some of which apply at compile time, like :s
and :i
. 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 :pos
and :continue
.
say RepeatChar.parse('bbbbbb', :rule('start'), :args(\('b')), :pos(4)).Str;# OUTPUT : «bb»
Method 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.
Returns a Match object on success, and Nil on failure.