aboutsummaryrefslogtreecommitdiff
path: root/lib/IRC/Client/Grammar.pm6
diff options
context:
space:
mode:
Diffstat (limited to 'lib/IRC/Client/Grammar.pm6')
-rw-r--r--lib/IRC/Client/Grammar.pm621
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/IRC/Client/Grammar.pm6 b/lib/IRC/Client/Grammar.pm6
new file mode 100644
index 0000000..255528a
--- /dev/null
+++ b/lib/IRC/Client/Grammar.pm6
@@ -0,0 +1,21 @@
+unit grammar IRC::Client::Grammar;
+token TOP { <message>+ <leftovers> }
+token leftovers { \N* }
+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 { <-[\ \x0\r\n]>+? <before [<SPACE> | '@']>}
+ token host { <-[\s!@]>+ }
+ token command { <letter>+ | <number>**3 }
+ token params { <SPACE>* [ ':' <trailing> | <middle> <params> ]? }
+ token middle { <-[:\ \x0\r\n]> <-[\ \x0\r\n]>* }
+ token trailing { <-[\x0\r\n]>* }
+
+ token letter { <[a..zA..Z]> }
+ token number { <[0..9]> }
+ token special { <[-_\[\]\\`^{}]> }