#===============================================#
# RecDescent grammar to parse a CD TOC file. #
#===============================================#
{
# Nothing here yet.
}
# Grammar:
contents: line(s?) #
line: text { }
| Parameter {$return = $item{'Parameter'};}
| word foo { $main::VARIABLE{$item{'word'}}=$item{'foo'} } # not quite sure how this will be useful...
| text
| word {
$return = $item{'word'};
}
| BlankLine
# | Comment
|
# Next line not quite right. Consider using $VARIABLE
Parameter: word qstring { $return = { $item{'word'} => $item{'qstring'} }; }
# CD_TEXT is *always* followed by a , then LANGUAGE_MAP or LANGUAGE.
# Should I be considering recursion here?
text: /CD_TEXT {/ { return main::subroutine(@item) }
setting: /LANGUAGE_MAP \d/ { print "Map\n"; }
| /LANGUAGE \d/ { print "Lang\n"; }
# Tokens:
BlankLine: /^\s+$/m
Comment:
word: /\w+/
msf: /\d\d:\d\d:\d\d/
newline: /\n/
number: /\d+/
qstring: '"'/[^"]+/'"' { $return = $item[2]; }
#qstring: # See http://www.perlmonks.org/?node_id=485933
# { my ($marker, $quote, $text) = @{$item[0]}[0..2]; }
foo: /\d+.\d+.\d+/ # This will match both 14:43:00 and 38935137