use v6; # use Grammar::Tracer; grammar IRC::Grammar:ver<1.001001> { token TOP { [ \n ] } token message { [':' ' '+ ]? } token prefix { | ['!' ]? ['@' ]? } token command { + | **3 } token params { ' '* [ ':' | ]? } token middle { <-[: \0\r\n]> <-[ \0\r\n]>+ } token trailing { <-[\0\r\n]>+ } token target { [ ',' ]? } token to { | '@' | | } token channel { ['#' | '&'] } token servername { } token host { \S+ }# see RFC 952 [DNS:4] for allowed hostnames token nick { [ | | ]+ } token mask { <[#$]> } token chstring { <-[ \a\0\r\l,]> } token user { <-[ \0\r\l]>+ } token letter { <[a..zA..Z]> } token number { <[0..9]> } token special { <[-\[\]\\`^{}]> } } class IRC::Grammar::Actions { # method class ($/) { $/.make: ~$/ } # method rules ($/) { $/.make: ~$/ } # method pair ($/) { $/.make: $.made => $.made } # method command ($/) { $/.make: $ } method message ($/) { $/.make: 42 } method TOP ($/) { $/.make: $».made; } #$».made } # } } my $res = IRC::Grammar.parse(":verne.freenode.net 372 Perl6IRC :- running for their sustained support.\r\n", :actions(IRC::Grammar::Actions)).made; say $res; # say $res;