Skip to content

Instantly share code, notes, and snippets.

@zoffixznet
Created December 5, 2015 18:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zoffixznet/9f64995f16faa6fc7925 to your computer and use it in GitHub Desktop.
Save zoffixznet/9f64995f16faa6fc7925 to your computer and use it in GitHub Desktop.
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 { <[a..zA..Z]>+ | <[0..9]>**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> } # see RFC 952 [DNS:4] for allowed hostnames
token host { <-[\s!@]>+ } # see RFC 952 [DNS:4] for allowed hostnames
token nick { <[a..zA..Z]> [ <[a..zA..Z0..9]> | <[-\[\]\\`^{}]> ]+ }
token mask { <[#$]> <chstring> }
token chstring { <-[\ \a\0\r\n,]> }
token user { <-[\ \0\r\n]>+ }
}
my @messages = (
":verne.freenode.net 372 Perl6IRC :- running for their sustained support.\r\n",
);
say so IRC::Grammar.parse(@messages[$_]) for 0..@messages.elems-1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment