aboutsummaryrefslogtreecommitdiff
path: root/test.p6
blob: dfc90f4930c9744ed0afaac28ac4ba363082e265 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use v6;
grammar IRC::Grammar:ver<1.001001> {
    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]>* }

        token letter { <[a..zA..Z]> }
        token number { <[0..9]> }
        token special { <[-\[\]\\`^{}]> }
}

class IRC::Grammar::Actions{
    method TOP ($/) { $/.make: $<message>>>.made }
}

say IRC::Grammar.parse(":verne.freenode.net 372 Perl6IRC :- running for their sustained support.\r\n");

=finish

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");