30.3 The structure of a smlyacc output file and the interface file specification
smlyacc generates a file YaccInputFile.grm.sml containing one structure of the following signature.
signature ML_LRVALS =
sig
structure Tokens : ML_TOKENS
structure Parser : PARSER
sharing type Parser.token = Tokens.token
end
This signature and other supporting library for smlyacc are collected in smlyacc-lib.smi. In order to use the generated parser program file, the following interface file must be written.
_require "basis.smi"
_require "ml-yacc-lib.smi"
structure <Name> =
struct
structure Parser =
struct
type token (= boxed)
type stream (= boxed)
type result = Absyn.parseresult
type pos = int
type arg = unit
exception ParseError
val makeStream : {lexer:unit -> token} -> stream
val consStream : token * stream -> stream
val getStream : stream -> token * stream
val sameToken : token * token -> bool
val parse : {lookahead:int,
stream:stream,
error: (string * pos * pos -> unit),
arg: arg}
-> result * stream
end
structure Tokens =
struct
type pos = Parser.pos
type token = Parser.token
<the set of Token forming functions>
...
val EOF: word * pos * pos -> token
val CHAR: string * pos * pos -> token
....
end
end
In Parser structure, pos,arg, result types are those that are specified in .grm. The other components are fixed and should be specified as above. To write the Token structure,copy the contents of the .grm.sig signature generated by smlyacc.
The components are described below.
-
•
token type. The abstract type for the token returned by the lexer generated by smllex.
-
•
stream type. The abstract type for the input stream of the parser.
-
•
result type. The type of the output of the parser. It should be the same as the type of the attribute of the top-level grammar rule specified in the YaccInputFile.grm file. の属の性の型と同一である.
-
•
pos type. The position data type used by the lexer.
-
•
arg type. The additional argument type for the parser specified in the YaccInputFile.grm file.
-
•
ParseError exception. Parse error exception generated by the parser.
-
•
makeStream function. It takes a lexer and return the input stream for the parser.
-
•
consStream function. This up-push one token to the given input stream.
-
•
getStream function. It returns the first token in the current input stream.
-
•
sameToken function. Token equality checking function.
-
•
parse function. The parser function. It takes the current input stream and returns the generated abstract syntax tree and the rest of the input stream.