Especificaciones Básicas

Los nombres refieren a símbolo o a símbolos no terminales. Yacc requiere los nombres simbólicos ser declarado como tal. Además, porque las razones discutidas en la sección 3, es a menudo deseable incluir el analizador léxico como parte del archivo de la especificación; puede ser útil incluir otros programas también. Así, cada archivo de la especificación consiste en tres secciones: los declaraciones, reglas (de la gramática), y programas. Las secciones son separadas por las marcas dobles de los por ciento ``%%''. (el por ciento ``%'' se utiliza generalmente en las especificaciones de Yacc como carácter del escape.)

Es decir un archivo lleno de la especificación mira gusto

        los declaraciones el %% gobiernan programas del 
%%

La sección del declaración puede ser vacía. Por otra parte, si se omite la sección de los programas, la segunda marca del %% se puede omitir también;

así, la especificación legal más pequeña de Yacc es

        reglas del %%

Los espacios en blanco, las lengüetas, y los newlines se no hacen caso excepto que pueden no aparecer en nombres o símbolos reservados multi-cara'cter. Los comentarios pueden aparecer dondequiera que un nombre sea legal; son en incluido/*. . . * /, como en C y PL/I.

La sección de las reglas se compone de unas o más reglas de la gramática. Una regla de la gramática tiene la forma:

        A: CUERPO;

A representa un nombre no terminal, y el CUERPO representa una secuencia de cero o más nombres y literal. Los dos puntos y el punto y coma son puntuación de Yacc.

Los nombres pueden estar de longitud arbitraria, y se pueden componer de letras, de la raya ``_'', del punto ``.'', y de dígitos no-iniciales. Las letras superiores y minúsculas son distintas. Los nombres usados en el cuerpo de una regla de la gramática pueden representar símbolo o símbolos no terminales.

Un literal consiste en un carácter incluido en los apóstrofes ``'''. como en C, el ``\'' del backslash es un carácter del escape dentro de literales, y se reconocen todos los escapes de C. Así

        ' \ ' ' de la vuelta del ' \r ' del newline del ' 
\n ' ``''' ' \ \ ' del apóstrofe xxx' ' del \xxx ' alimentación ' de
forma `` del \f de la ' de la ' tecla de retroceso ' del \b de la ' 
lengüeta ' del \t del ``\'' ' del backslash en octal

Por un número de razones técnicas, el carácter de NUL (' \0 ' o 0) se debe nunca utilizar en reglas de la gramática.

Si hay varias reglas de la gramática con el mismo lado de la mano izquierda, la barra vertical ``|el '' se puede utilizar para evitar de reescribir el lado de la mano izquierda. Además, el punto y coma en el final de una regla se puede caer antes de una barra vertical. Así las reglas de la gramática

        A: B C D; A: E F; A: 
G;

puede ser dado a Yacc como

        A: B C D                  |       E F                  |       G;

No es necesario que todas las reglas de la gramática con el mismo lado izquierdo aparecen juntas en la sección de las reglas de la gramática, aunque hace la entrada mucho más legible, y más fácil cambiar.

Si un símbolo no terminal empareja la secuencia vacía, esto se puede indicar de la manera obvia:

        vacío: ;

Los nombres que representan símbolo deben ser declarados; esto es hecha lo más simplemente posible por la escritura

        %token name1 name2. . .

en la sección de los declaraciones. (véase las secciones 3, 5, y 6 para mucho más discusión). Cada nombre no definido en la sección de los declaraciones se asume para representar un símbolo no terminal. Cada símbolo no terminal debe aparecer en el lado izquierdo por lo menos de una regla.

De todos los símbolos no terminales, uno, llamó el símbolo de inicio, tiene importancia particular. El programa de análisis se diseña para reconocer el símbolo de inicio; así, este símbolo representa el más grande, la mayoría de la estructura general descrita por la gramática gobierna. Por defecto, el símbolo de inicio se toma para ser el lado de la mano izquierda de la primera regla de la gramática en la sección de las reglas. Es posible, y en el hecho deseable, declarar el símbolo de inicio en los declaraciones seccione explícitamente con la palabra clave de %start:

        símbolo de %start

El extremo de la entrada al programa de análisis es señalado por un símbolo especial, llamado el endmarker. Si el símbolo hasta, pero no incluyendo, la forma del endmarker una estructura que empareje el símbolo de inicio, la función del programa de análisis vuelve a su llamador después de que se considere el endmarker; acepta la entrada. Si el endmarker se considera en cualquier otro contexto, es un error.

Es el trabajo del analizador léxico user-supplied volver el endmarker cuando es apropiado; vea la sección 3, abajo. El endmarker representa generalmente un cierto estado razonablemente obvio de I/O, tal como `` '' end-of-file o `` extremo-de-registre ' '.

< atras  siguiente >

Hosted by www.Geocities.ws

1