Quick actions

cmd+k|ctrl+k

Navigation

Languages

examples.perl6.org/categories/parsers/SimpleStrings.html

Snippet info

Language

Raku

Visibility

public

Author

raiph

Created

2018-12-07T23:52:07Z

Updated

2018-12-07T23:56:08Z

# Perl 6 Example from: https://examples.perl6.org/categories/parsers/SimpleStrings.html

use v6;

grammar String::Simple::Grammar {
    rule TOP {^ <string> $}
    # Note for now, {} gets around a rakudo binding issue
    token string { <quote> {} <quotebody($<quote>)> $<quote> }
    token quote { '"' | "'" }
    token quotebody($quote) { ( <escaped($quote)> | <!before $quote> . )* }
    token escaped($quote) { '\\' ( $quote | '\\' ) }
}

# The parse-tree builder ultimately returns the string itself.
class String::Simple::Actions {
    method TOP($/) { make $<string>.made }
    method string($/) { make $<quotebody>.made }
    method quotebody($/) { make [~] $0.map: {.<escaped>.made or ~$_} }
    method escaped($/) { make ~$0 }
}

# Here is a sample string:
my $sample = q{"This is a quote"};
my $result = String::Simple::Grammar.parse: $sample; # parse it
say $result.gist;

# A more complicated sample: '\''
$sample = "'\\\''";
$result = String::Simple::Grammar.parse: $sample; # parse it
say $result.gist;
INFO