diff options
Diffstat (limited to 'test.p6')
-rw-r--r-- | test.p6 | 61 |
1 files changed, 29 insertions, 32 deletions
@@ -1,37 +1,34 @@ use v6; -# use Grammar::Tracer; grammar IRC::Grammar:ver<1.001001> { - token TOP { [ <message> \n ] } - token message { [':' <prefix> ' '+ ]? <command> <params> } - token prefix { <servername> | <nick> ['!' <user>]? ['@' <host> ]? } - token command { <letter>+ | <number>**3 } - token params { ' '* [ ':' <trailing> | <middle> <params> ]? } - token middle { <-[: \0\r\n]> <-[ \0\r\n]>+ } - token trailing { <-[\0\r\n]>+ } - token target { <to> [ ',' <target> ]? } - token to { <channel> | <user> '@' <servername> | <nick> | <mask> } - token channel { ['#' | '&'] <chstring> } - token servername { <host> } - token host { \S+ }# see RFC 952 [DNS:4] for allowed hostnames - token nick { <letter> [ <letter> | <number> | <special> ]+ } - token mask { <[#$]> <chstring> } - token chstring { <-[ \a\0\r\l,]> } - token user { <-[ \0\r\l]>+ } - token letter { <[a..zA..Z]> } - token number { <[0..9]> } - token special { <[-\[\]\\`^{}]> } -} + token TOP { <message> } + token SPACE { ' '+ } + token message { [':' <prefix> <SPACE> ]? <command> <params> \n } + token prefix { + [ <servername> || <nick> ['!' <user>]? ['@' <host>]? ] + <before <SPACE>> + } + token servername { <host> } + token nick { <letter> [ <letter> | <number> | <special> ]* } + token user { <-[\ \0\r\n]>+? <before [<SPACE> | '@']>} + token host { <-[\s!@]>+ } + token command { <letter>+ | <number>**3 } + token params { <SPACE>* [ ':' <trailing> | <middle> <params> ]? } + token middle { <-[:\ \0\r\n]> <-[\ \0\r\n]>* } + token trailing { <-[\0\r\n]>* } -class IRC::Grammar::Actions { - # method class ($/) { $/.make: ~$/ } - # method rules ($/) { $/.make: ~$/ } - # method pair ($/) { $/.make: $<class>.made => $<rules>.made } - # method command ($/) { $/.make: $<command> } - method message ($/) { $/.make: 42 } - method TOP ($/) { $/.make: $<message>».made; } #$<message>».made } - # } + token letter { <[a..zA..Z]> } + token number { <[0..9]> } + token special { <[-\[\]\\`^{}]> } } -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<command>; +my @messages = ( + ":verne.freenode.net 372 Perl6IRC :- running for their sustained support.\r\n", + ":Perl6IRC MODE Perl6IRC :+i\r\n", + ":Perl6IRC!~Perl6IRC@static-67-226-172-41.ptr.terago.net JOIN #perl6bot\r\n", + ":verne.freenode.net MODE #perl6bot +ns\r\n", + ":verne.freenode.net 353 Perl6IRC @ #perl6bot :@Perl6IRC\r\n", + ":ZoffixW!~ZoffixW@unaffiliated/zoffix JOIN #perl6bot\r\n", + ":ZoffixW!~ZoffixW@unaffiliated/zoffix PRIVMSG #perl6bot :test\r\n", +); +say so IRC::Grammar.parse(@messages[$_]) for 0..@messages.elems-1; +# say IRC::Grammar.parse(":verne.freenode.net 372 Perl6IRC :- running for their sustained support.\r\n"); |