# 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 { <[-\[\]\\`^{}]> } # unit class IRC::Grammar::Actions:ver<1.001001>; # method TOP ($/) { $/.make: $».made } # method message ($/) { $/.make: # prefix => $ .made, # command => $.made, # params => $ | ] [ '!' ]? [ '@' ]? } # method command ($/) { + | **3 } # method params ($/) { ' '+ [ ':' | ]? } # method middle ($/) { <-[: \0\r\n]> <-[ \0\r\n]>+ } # method trailing ($/) { <-[\0\r\n]> } # # method class ($/) { $/.make: ~$/ } # method rules ($/) { $/.make: ~$/ } # method pair ($/) { $/.make: $.made => $.made } # method TOP ($/) { $/.make: $».made }