30.5 The interface file for the generated lexer
smllex generate a structure containing a lexer creating function makeLexer. In order to use the generated lexer program file, a interface file must be written. The minimal interface is of the following form.
_require "basis.smi" _require "coreML.grm.smi" structure CoreMLLex = struct val makeLexer : (int -> string) -> unit -> CoreML.Tokens.token end
The first argument to the makeLexer is a function that takes a number and return an input string of that specified size. Applying this function to an input function like makeLexer (fn n => TextIO.inputN(TextIO.stdIn,n) generates a lexer function of type unit -> token. This lexer function can be specified as an argument to the makeStream function of the parser to obtain a token stream for the parser input.
User declarations such as extra arguments are placed in the UserDeclarations structure. Its interface file should be of the following form.
_require "basis.smi" _require "<YaccInputFile>.grm.smi" structure MLLex = struct structure UserDeclarations = struct type token = <YaccName>.Tokens.token type pos = <YaccName>.Tokens.pos type arg (= boxed) end val makeLexer : (int -> string) -> UserDeclarations.arg -> unit -> UserDeclarations.token end