diff --git a/lib/ABC.pm b/lib/ABC.pm index 190d42a..f6c4066 100644 --- a/lib/ABC.pm +++ b/lib/ABC.pm @@ -1,5 +1,22 @@ use v6; +grammar ABC +{ + regex header_field_name { \w } + regex header_field_data { \N* } + regex header_field { ^^ ':' \s* $$ } + regex header { [ \n]+ } + + regex basenote { <[a..g]+[A..G]> } + regex octave { \'+ | \,+ } + regex accidental { '^' | '^^' | '_' | '__' | '=' } + regex pitch { ? ? } + + regex tie { '-' } + regex note_length { [\d* ['/' \d*] ] | '/' } + regex note { ? ? } +} + class ABCHeader { diff --git a/playing.pl b/playing.pl index 10ebeac..727424a 100644 --- a/playing.pl +++ b/playing.pl @@ -1,5 +1,8 @@ use v6; +BEGIN { push @*INC, "lib" } +use ABC; + my $abc = q«X:64 T:Cuckold Come Out o' the Amrey S:Northumbrian Minstrelsy @@ -11,23 +14,6 @@ g>ecg ec e/f/g/e/ | d/c/B/A/ Gd BG B/c/d/B/ | g/f/e/d/ c/d/e/f/ gc e/f/g/e/ | dB/A/ gB +trill+A2 +trill+e2 :|»; -grammar ABC -{ - regex header_field_name { \w } - regex header_field_data { \N* } - regex header_field { ^^ ':' \s* $$ } - regex header { [ \n]+ } - - regex basenote { <[a..g]+[A..G]> } - regex octave { \'+ | \,+ } - regex accidental { '^' | '^^' | '_' | '__' | '=' } - regex pitch { ? ? } - - regex tie { '-' } - regex note_length { [\d* ['/' \d*] ] | '/' } - regex note { ? ? } -} - if $abc ~~ m/ / { for $ -> $line