Documentation for 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 given to the starting rule if provided.

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.

Additional named arguments are used as options for matching, so you can specify things like :c(4) to start parsing from the fourth character. All matching adverbs are allowed.

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.

grammar CSV {
    token TOP { [ <line> \n? ]+ }
    token line {
        ^^            # Beginning of a line 
        <value>* % \, # Any number of <value>s with commas in between them 
        $$            # End of a line 
    }
    token value {
        [
        | <-[",\n]>     # Anything not a double quote, comma or newline 
        | <quoted-text> # Or some quoted text 
        ]*              # Any number of times 
    }
    token quoted-text {
        \"
        [
        | <-["\\]> # Anything not a " or \ 
        | '\"'     # Or \", an escaped quotation mark 
        ]*         # Any number of times 
        \"
    }
}.parseq:to/EOCSV/ ).say; 
    Year,Make,Model,Length
    1997,Ford,E350,2.34
    2000,Mercury,Cougar,2.38
    EOCSV

This outputs:

Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38
 line => Year,Make,Model,Length
  value => Year
  value => Make
  value => Model
  value => Length
 line => 1997,Ford,E350,2.34
  value => 1997
  value => Ford
  value => E350
  value => 2.34
 line => 2000,Mercury,Cougar,2.38 
  value => 2000
  value => Mercury
  value => Cougar
  value => 2.38