aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-07-19 21:55:23 +1000
committerRuben Westerberg <drclaw@mac.com>2019-07-19 21:55:23 +1000
commit3c4cb2454d629dff131ce8ff9dd7056255b28d13 (patch)
tree60f0d3235419a93e59c652b2d8552bda43057f53
parent7ee9a1595d0d3eb6b56bf0adc01d1631a3679a1b (diff)
downloadperlweeklychallenge-club-3c4cb2454d629dff131ce8ff9dd7056255b28d13.tar.gz
perlweeklychallenge-club-3c4cb2454d629dff131ce8ff9dd7056255b28d13.tar.bz2
perlweeklychallenge-club-3c4cb2454d629dff131ce8ff9dd7056255b28d13.zip
Added ch2 solution for p6
First time using grammars
-rwxr-xr-xchallenge-017/ruben-westerberg/perl6/ch-2.p640
1 files changed, 40 insertions, 0 deletions
diff --git a/challenge-017/ruben-westerberg/perl6/ch-2.p6 b/challenge-017/ruben-westerberg/perl6/ch-2.p6
new file mode 100755
index 0000000000..0d6d955f9d
--- /dev/null
+++ b/challenge-017/ruben-westerberg/perl6/ch-2.p6
@@ -0,0 +1,40 @@
+#!/usr/bin/env perl6
+#
+grammar URI {
+ token TOP {<scheme>\:<authority>?<path>[\?<query>]?[\#<fragment>]?};##|<authority>};
+ token scheme { :i(<alpha>[<[\-\.\+] + alnum>]*)};
+ token path { (\/<alpha>*)+};
+ token authority { (\/\/)[<user>[\:<password>]?\@]?<host>[\:<port>]?};
+ token user { (<alnum>+)};
+ token password { ( <alnum> +)};
+
+ token host { (<alnum>+)};
+ token port { (<alnum>+)};
+ token query { <qpair>[\&<qpair>]*};
+ token qpair { (<qkey>\=<qval>)+};
+ token qkey {<alnum>+};
+ token qval {<alnum>+};
+ token fragment { (<alnum>+)};
+ ##token query { \?<alpha>+};
+ ##token fragment { <alpha>+ };
+}
+ ##|(<authority><path>)<query>?<fragment>?};
+
+
+#say URI.parse("jdbc://user:password@localhost:3306/pwc?profile=true#h1");
+my $m=URI.parse(@*ARGS[0]);
+die "Not a URI\n" unless $m;
+#say $m;
+given $m {
+ put "Scheme: {.<scheme>}";
+ given .<authority> {
+ put "User: {.<user>}";
+ put "Password: {.<password>//""}";
+ put "Host: {.<host>}";
+ put "Port: {.<port>//""}";
+ }
+ put "Path: {.<path>//""}";
+ put "Query: {.<query>//""}";
+ put "Fragment: {.<fragment>//""}";
+
+}