An MLF consists of one or more individual definitions. Blank lines in an MLF are ignored but otherwise the line structure is significant. The first line must contain just #!MLF!# to identify it as an MLF file. This is not necessary for use with the -I option but some HTK tools need to be able to distinguish an MLF from a normal label file. The following syntax of MLF files is described using an extended BNF notation in which alternatives are separated by a vertical bar |, parentheses ( ) denote factoring, brackets [ ] denote options, and braces { } denote zero or more repetitions.
MLFDef { MLFDef }
MLF = ``#!MLF!#''
Each definition is either a transcription for immediate loading or a subdirectory to search.
MLFDef = ImmediateTranscription | SubDirDef
An immediate transcription consists of a pattern on a line by itself immediately followed by a transcription which as far as the MLF is concerned is arbitrary text. It is read using whatever label file ``driver'' routines are installed in HLABEL. It is terminated by a period written on a line of its own.
Pattern
Transcription
``.''
ImmediateTranscription =
A subdirectory definition simply gives the name of a subdirectory
to search. If the required label file is found in that subdirectory
then the label file is loaded, otherwise the next matching subdirectory
definition is checked.
SearchMode = ``
SubDirDef = Pattern SearchMode String
->
'' | ``=>
''
The two types of search mode are described below. A pattern is just a
string
Pattern = String
except that the characters `?' and `*' embedded in the string act as wildcards such that `?' matches any single character and `*' matches 0 or more characters. A string is any sequence of characters enclosed in double quotes.