From 976aaa5e7caa5506ead757bb511207462526cb26 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sat, 5 Dec 2015 15:42:25 -0500 Subject: Wrote working grammar --- lib/IRC/Grammar.pm6 | 38 ++++++++++++++++----------------- test.p6 | 61 +++++++++++++++++++++++++---------------------------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/lib/IRC/Grammar.pm6 b/lib/IRC/Grammar.pm6 index 2013b9b..46d71cc 100644 --- a/lib/IRC/Grammar.pm6 +++ b/lib/IRC/Grammar.pm6 @@ -1,24 +1,24 @@ # use Grammar::Debugger; unit grammar IRC::Grammar:ver<1.001001>; -token ws { ' ' } -token TOP { [ \r\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 { \S+ } # see RFC 952 [DNS:4] for details on 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 { <[-\[\]\\`^{}]> } +token TOP { } +token SPACE { ' '+ } +token message { [':' ]? \n } + token prefix { + [ || ['!' ]? ['@' ]? ] + > + } + token servername { } + token nick { [ | | ]* } + token user { <-[\ \0\r\n]>+? | '@']>} + token host { <-[\s!@]>+ } + token command { + | **3 } + token params { * [ ':' | ]? } + token middle { <-[:\ \0\r\n]> <-[\ \0\r\n]>* } + token trailing { <-[\0\r\n]>* } + + token letter { <[a..zA..Z]> } + token number { <[0..9]> } + token special { <[-\[\]\\`^{}]> } # unit class IRC::Grammar::Actions:ver<1.001001>; # method TOP ($/) { $/.make: $».made } diff --git a/test.p6 b/test.p6 index a1f5062..4da2d44 100644 --- a/test.p6 +++ b/test.p6 @@ -1,37 +1,34 @@ 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 { <[-\[\]\\`^{}]> } -} + token TOP { } + token SPACE { ' '+ } + token message { [':' ]? \n } + token prefix { + [ || ['!' ]? ['@' ]? ] + > + } + token servername { } + token nick { [ | | ]* } + token user { <-[\ \0\r\n]>+? | '@']>} + token host { <-[\s!@]>+ } + token command { + | **3 } + token 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: $.made => $.made } - # method command ($/) { $/.make: $ } - method message ($/) { $/.make: 42 } - method TOP ($/) { $/.make: $».made; } #$».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; +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"); -- cgit v1.1