You are on page 1of 10

FUNDAMENTOS DE YACC

LEXY LUCIN S7K

CONCEPTOS BSICOS
Es una herramienta que sirve para generar un programa, capaz de analizar gramaticalmente una entrada dada por lex, a partir de una especificacin. Esta especificacin, debe contener los tokens reconocidos y los tipos de datos de los mismos si es que se ocupan para realizar operaciones sobre ellos, y una especificacin de gramtica en un formato similar a BNF (Backus Naus Form), que va desde el smbolo no terminal ms general a cada una de las opciones terminales.

El usuario de Yacc prepara una especificacin que incluye: un conjunto de reglas que describen los elementos de la entrada un cdigo a ser invocado cuando una regla es reconocida una o ms rutinas para examinar la entrada

PROCESO EN YACC

Luego Yacc convierte la especificacin en una funcin en C que examina la entrada. Esta funcin, un parser, trabaja mediante la invocacin de un analizador lxico que extrae tokens de la entrada. Los tokens son comparados con las reglas de construccin de la entrada, llamadas reglas gramaticales. Cuando una de las reglas es reconocida, el cdigo provisto por el usuario para esa regla (una accin) es invocado. Las acciones son fragmentos de cdigo C, que pueden retornar valores y usar los valores retornados por otras acciones.

ESCRIBIENDO UNA ESPECIFICACIN YACC


Una especificacin yacc describe una gramtica libre de contexto que puede ser usada para generar un parser. Esta gramtica tiene cuatro clases de elementos: Tokens, que son un conjunto de smbolos terminales Elementos sintcticos, que son un conjunto de smbolos no terminales Reglas de produccin que definen un smbolo no terminal (el lado izq.) en trminos de una secuencia de no terminales y terminales (lado derecho) Una regla start que reduce todos los elementos de la gramtica a una sola regla.

ALGUNAS ESPECIFICACIONES
El nombre de un smbolo puede ser de cualquier longitud, consistiendo en letras, punto, underscore, y dgitos (en cualquier lugar excepto en la primera posicin). Se distingue entre maysculas y minsculas. Los nombres de smbolos no terminales van en minsculas y los tokens en maysculas por convencin. Si la entrada no responde a la gramtica, entonces el parser imprimir el mensaje syntax error. Este mensaje emitido por la rutina yyerror, que puede ser redefinida por el programador para proveer ms informacin.

EL FORMATO COMPLETO TIENE LOS SIGUIENTES ELEMENTOS:

SECCIN DE DECLARACIONES:
La

seccin de declaraciones contiene informacin que afecta la operacin de yacc. Esta seccin usa varias palabras claves para definir tokens y sus caractersticas. Cada una de estas palabras claves es seguida por una lista de tokens o caracteres literales entre apstrofes.

SECCIN DE REGLAS:

La

seccin de reglas contiene las reglas de produccin que describen la gramtica. En general una regla consiste de uno o ms conjuntos de tokens y no terminales con una accin opcional para cada conjunto de tokens.

SECCIN DE CDIGO:
La seccin de cdigo C es opcional, pero puede contener cualquier cdigo C provisto por el usuario. All se pueden especificar la rutina de anlisis lxico yylex, una rutina main, o subrutinas usadas por acciones de la seccin de reglas. Tres rutinas son requeridas: main, yylex, y yyerror, aunque estas tambin pueden ser vinculadas externamente. Se pueden usar comentarios como en C (/* ... */). Blancos, tabs, y newlines se ignoran.

You might also like