El Analizador léxico

Deje el nombre para el programa de análisis dado en el declaración de %name para ser cerca denotada { n } y el nombre del archivo de la especificación sea denotado por { nombre de espec. } el generador del programa de análisis crea un functor nombrado { el n}LrValsFun para los valores necesitó para un programa de análisis particular. Este functor se coloca adentro { espec. name}.sml. Este functor contiene un símbolo de la estructura que permite que usted construya los terminales de los valores apropiados. La estructura tiene una función para cada terminal que tome un tuple que consiste en el valor para el terminal (si hay cualquiera), una posición extrema izquierda para el terminal, y una posición de derecha para el terminal y construya el terminal de estos valores.

Una firma para el símbolo de la estructura se crea y se coloca en el archivo del '' de ``.sig creado por ML-Yacc-Yacc. Esta firma es { los n}_TOKENS, donde { n } está el nombre dado en la especificación del programa de análisis. Una firma { los n}_LRVALS se crean para la estructura producida aplicándose { n}LrValsFun.

Utilice la firma { n}_TOKENS para crear un functor para el analizador léxico que toma el símbolo de la estructura como discusión. La firma { los n}_TOKENS no cambiarán a menos que
el declaración de %term en una especificación sea alterado agregando los terminales o cambiando los tipos de terminales. Usted no necesita recompile el functor léxico del analizador cada vez que la especificación para el programa de análisis se cambia si la firma { los n}_TOKENS no cambian.

Si usted está utilizando Ml-Lex para crear el analizador léxico, usted puede dar vuelta a la estructura del lexer en un functor usando
el declaración de %header. %header permite que el usuario defina el jefe para un cuerpo de la estructura.

Si el nombre del programa de análisis en la especificación fuera Calc, usted agregaría este declaración a la especificación para el analizador léxico:

  %header (símbolo de CalcLexFun(structure del functor:  Calc_TOKENS)) 

Usted debe definir el siguiente en la sección de las definiciones del usuario:

  mecanografíe la posición 

Éste es el tipo de valores de la posición para los terminales. Este tipo debe ser igual que el que esta' declarado en la especificación para la gramática. Nota, sin embargo, que este tipo no está disponible en la estructura del símbolo que da parámetros el functor del lexer.

Usted debe incluir el código siguiente en la sección de las definiciones del usuario de la especificación Ml-Lex:

  mecanografíe el símbolo del svalue = del tipo de Tokens.svalue (' a, 'b) = (' a, 'b) lexresult del tipo de Tokens.token = (svalue, posición) símbolo 

Estos tipos se utilizan para dar firmas de los lexers.

Usted puede utilizar un lexer construido usando Ml-Lex con
el declaración de %arg, pero usted debe seguir las instrucciones especiales para atar el programa de análisis y el lexer junto.

< atras  siguiente >

 

Hosted by www.Geocities.ws

1