Especificaciones  Ml-Yacc

Una especificación Ml-Yacc consiste en tres porciones, cada uno de las cuales es separada de las otras por un delimitador del %%. El formato general es:

{ declaraciones del usuario }
%%
{ declaraciones Ml-Yacc }
%%
{ reglas }

Usted puede definir los valores disponibles en las acciones semánticas de las reglas en la sección de los declaraciones del usuario. Se recomienda que usted mantiene el tamaño de esta sección tan pequeño como sea posible bloques grandes y del lugar del código otros módulos.

La sección de los declaraciones Ml-Yacc se utiliza para hacer un sistema de declaraciones requeridos y un sistema de declaraciones opcionales. Usted debe declarar los nonterminals y los terminales y los tipos de los valores asociados a ellos allí. Usted debe también nombrar el programa de análisis y declarar el tipo de valores de la posición. Usted debe especificar el sistema de los terminales que pueden seguir el símbolo de inicio y el sistema de terminales non-shiftable. Usted puede declarar opcionalmente los precedences para los terminales, hace los declaraciones que mejorarán la error-recuperacio'n, y suprime la generación de las reducciones del defecto en el programa de análisis. Usted puede declarar si el generador del programa de análisis debe crear una descripción prolija del programa de análisis en un archivo del '' de ``.desc. Esto es útil para encontrar las causas de los errores de shift/reduce y el otro análisis está en conflicto.

Usted puede también declarar si las acciones semánticas están libres de efectos secundarios significativos y terminar siempre. Normalmente, Ml-Yacc retrasa la evaluación de acciones semánticas hasta que la terminación de un acertado analiza. Esto se asegura de que no haya acciones semánticas al `` deshaga el '' si un error-correction sintáctico invalida algunas acciones semánticas. Si, sin embargo, las acciones semánticas están libres de efectos secundarios significativos y terminan siempre, los resultados de las acciones semánticas que son invalidadas por una lata error-correction sintáctica se no hagan caso siempre con seguridad.

Los programas de análisis funcionan más rápidamente y necesitan menos memoria cuando no es necesario a retrasa la evaluación de acciones semánticas. A le animan que escriba las acciones semánticas que están libres de efectos secundarios y siempre termine y declare esta información a Ml-Yacc.

Una acción semántica está libre de efectos secundarios significativos si puede ser ejecutado nuevamente un número razonablemente pequeño de épocas sin afectar el resultado de un análisis. (el reexecution ocurre cuando el programa de análisis error-correcting está probando correcciones posibles para fijar un error del sintaxis, y el número de épocas que ocurre el reexecution es limitado áspero, para cada error del sintaxis, por el número de los tiempos de los terminales la cantidad de lookahead permitió para el programa de análisis error-correcting).

La sección de las reglas contiene las producciones de la gramática independiente del contexto y sus acciones semánticas asociadas.

 

Definiciones Léxicas

Los comentarios tienen la misma definición léxica que hacen en el ml estándar y pueden para ser puestos dondequiera en una especificación.

Todos los caracteres hasta la primera ocurrencia de un exterior del %% que delimita de un comentario se ponen en la sección de los declaraciones del usuario. Después de ésa, las palabras y los símbolos siguientes son reservados:



de para = { }, * - >:|()

Las clases siguientes de los símbolos del ml se utilizan:

identificadores:
los identificadores nonsymbolic del ml, que consisten en un carácter alfabético siguieron por unos o más caracteres alfabéticos, caracteres numéricos, preparan '' del `` ', o subrayan el `` _ ' '.
variables del tipo:
identificador nonsymbolic del ml comenzando con '' de un `` primero '
números enteros:
unos o más dígitos decimales.
identificadores cualificados:
un identifer siguió por un período.

Las clases siguientes de los símbolos no-Ml se utilizan:

%es de los identificadores:
una muestra de los por ciento siguió por unas o más letras minúsculas del alfabeto. Los %es válidos de los identificadores son:
%arg %eop %header %keyword %left %name %nodefault %nonassoc %nonterm %noshift %pos %prec %prefer %pure %right %start %subst %term %value %verbose
código:
Esta clase se significa para llevar a cabo código del ml. El código del ml no se analiza para los errores del sintaxis. Consiste en paréntesis izquierdos seguidos por todos los caracteres hasta paréntesis derechos que balancean. Paréntesis en comentarios del ml y las secuencias del ml se excluyen de la cuenta de paréntesis que balancean.

Gramática

Ésta es la gramática para las especificaciones:

espec. ::= regla-lista de la cmd-lista el %% de los usuario-declaraciones el %%
Ml-tipo ::= tipos nonpolymorphic del ml (véase el manual estándar del ml)
símbolo ::= identificador
si'mbolo-lista ::= símbolo de la si'mbolo-lista
  | e
si'mbolo-tipo-lista ::= si'mbolo-tipo-lista | símbolo del Ml-tipo
  | lista del si'mbolo-tipo | símbolo
  | símbolo del Ml-tipo
  | símbolo
subst-lista ::= subst-lista | símbolo para el símbolo
  | e
cmd ::= %arg (Cualquier-Ml-patro'n) : Ml-tipo
  | si'mbolo-lista de %eop
  | código de %header
  | si'mbolo-lista de %keyword
  | si'mbolo-lista de %left
  | identificador de %name
  | %nodefault
  | si'mbolo-lista de %nonassoc
  | lista del si'mbolo-tipo de %nonterm
  | si'mbolo-lista de %noshift
  | Ml-tipo de %pos
  | si'mbolo-lista de %prefer
  | %pure
  | si'mbolo-lista de %right
  | símbolo de %start
  | subst-lista de %subst
  | si'mbolo-tipo-lista de %term
  | código del símbolo de %value
  | %verbose
cmd-lista ::= cmd de la cmd-lista
  | cmd
regla-prec ::= símbolo de %prec
  | e
cla'usula-lista ::= código de la regla-prec de la si'mbolo-lista
  | cla'usula-lista | código de la regla-prec de la si'mbolo-lista
regla ::= símbolo : cla'usula-lista
regla-lista ::= regla de la regla-lista
  | regla

Declaraciones Requeridos Ml-Yacc

%name
Usted debe especificar el nombre del programa de análisis con %name { nombre }.
%nonterm y %term
Usted debe definir el terminal y los sistemas no terminales usando los declaraciones de %term y de %nonterm, respectivamente. Estos declaraciones son como una definición del datatype del ml. El tipo del valor que un símbolo puede llevar se define a la vez que se define el símbolo. Cada los declaraciones consisten en la palabra clave ( %term o %nonterm ) seguida por una lista de las entradas del símbolo separadas por una barra (` del ` | ' '). cada entrada del símbolo es un nombre del símbolo seguido por un `` opcional del < Ml-tipo > ' '. que los tipos no pueden ser polimórficos. Esas entradas del símbolo sin un tipo no llevan ningún valor. Los nombres no terminales y terminales deben ser desunen y ningún nombre no se puede declarar más de una vez en cualquier declaración.

Los nombres y los tipos del símbolo se utilizan para construir una unión del datatype para los valores en el apilado semántico en el programa de análisis de LR y para nombrar los valores asociados a los subcomponentes de una regla. Los nombres y los tipos de terminales también se utilizan para construir una firma para una estructura que se pueda pasar al functor del lexer.

Porque los tipos y los nombres se utilizan en estas maneras, no utilice las palabras claves del ml como nombres del símbolo. Los programas producidos por ML-Yacc-Yacc no compilarán si las palabras claves del ml se utilizan como nombres del símbolo. Cerciórese de que los tipos especificados en el declaración de %term sean completamente tipos cualificados o estén disponibles en el ambiente del fondo cuando las firmas producidas por ML-Yacc-Yacc se cargan. No utilice ninguna tipos localmente definida de la sección de los declaraciones del usuario de la especificación.

Estos requisitos en los tipos en el declaración de %term no son una carga. Fuerzan los tipos ser definidos en otro módulo, que es una buena idea puesto que estos tipos serán utilizados en el módulo del lexer.
%pos
Usted debe declarar el tipo de posición valora el usar del declaración de %pos. El sintaxis es %pos < Ml-tipo >. Este tipo DEBE ser el mismo tipo que el que se encuentre realmente en el lexer. No puede ser polimórfico.

< atras  siguiente >

 

Hosted by www.Geocities.ws

1