method parse

Documentation for method parse assembled from the following types:

class Grammar

From Grammar

(Grammar) method parse

Defined as:

method parse($target:$rule = 'TOP',  Capture() :$args = \(), Mu :$actions = Mu*%opt)

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.

grammar RepeatChar {
    token start($character) { $character+ }
}
 
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 $actions = class { method TOP($/{ say "7" } };
grammar { token TOP { a { say "42" } b } }.parse('ab':$actions);
# 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 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.