Deje el nombre del archivo de la especificación de la
gramática ser cerca denotada { gramática } y el nombre del archivo de la
especificación del lexer se denote por { lexer } (e.g. en nuestro ejemplo de la
calculadora que éstos estarían parados para calc.grm y calc.lex,
respectivamente). Deje el nombre del programa de análisis en la especificación
ser representado por { n } (e.g. Calc en nuestro ejemplo de la calculadora).
Para construir un programa de análisis, haga el siguiente:
ml-yacc-lib.cm { lexer } { gramática }
Esto hará Ml-Yacc ser funcionada encendido { gramática }, produciendo archivos de fuente { grammar}.sig y { grammar}.sml, y Ml-Lex que se funcionará encendido { lexer }, produciendo un archivo de fuente { lexer}.sml. Entonces estos archivos serán compilados después de cargar las firmas y los módulos necesarios de la biblioteca Ml-Yacc según lo especificado por ml-yacc-lib.cm .
estructure { n}LrVals = { símbolo del n}LrValsFun(structure = LrParser.Token) estructura { n}Lex = { símbolo del n}LexFun(structure = { n}LrVals.Tokens) estructura { n}Parser = Join(structure ParserData = { estructura LrParser=LrParser de Lex={n}Lex de la estructura de n}LrVals.ParserData)
Si el lexer fue creado usando el declaración de %arg en Ml-Lex, la definición de { el n}Parser se debe cambiar para utilizar otro functor llamado JoinWithArg:
estructura { n}Parser = JoinWithArg (estructura LrParser=LrParser de Lex={n}Lex de la estructura de la estructura ParserData={n}LrVals.ParserData)
El contorno siguiente resume este proceso:
(* en la parte superior nivel disponible *) estructura SIMBÓLICA LrParser de la CORRIENTE LR_PARSER PARSER_DATA de LR_TABLE: LR_PARSER (* impreso en el archivo del sig creado por el generador del programa de análisis: *) firma { n}_TOKENS = símbolo de la estructura de los sig: Svalue SIMBÓLICO del tipo val MÁS: ' posición * ' posición - > (svalue, 'pos) Token.token INTLIT val: * ' posición * ' posición interna - > (svalue, 'pos) firma del extremo de Token.token... { n}_LRVALS = símbolo de la estructura de los sig: { estructura ParserData de los n}_TOKENS: PARSER_DATA que comparte ParserData.Token = Tokens.Token que comparte el tipo extremo de ParserData.svalue = de Tokens.svalue (* impreso por el generador del lexer: *) functor { símbolo del n}LexFun(structure: { n}_TOKENS) = extremo del struct... (* impreso en el archivo del sml creado por el generador del programa de análisis: *) functor { símbolo del n}LrValsFun(structure: SÍMBOLO) = estructura ParserData del struct = símbolo de la estructura del struct = (* código en la sección del jefe de la especificación *) jefe simbólico de la estructura =... mecanografíe el svalue =... mecanografíe el resultado =... mecanografíe posición =... estructure las acciones =... estructure EC =... tabla val =... símbolo de la estructura del extremo: { n}_TOKENS = svalue del tipo del símbolo = de ParserData.Token de la estructura del struct =... diversión PLUS(p1, p2) =... diversión INTLIT(i, p1, p2) =... extremo del extremo (* ser hecho por el usuario: *) estructura { n}LrVals = { símbolo del n}LrValsFun(structure = LrParser.Token) estructura { n}Lex = { símbolo del n}LexFun(structure = { n}LrVals.Tokens) estructura { n}Parser = Join(structure Lex = { estructura ParserData del n}Lex = { estructura LrParser = LrParser del n}ParserData)