ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Compilador YACC


Enviado por   •  18 de Mayo de 2014  •  1.353 Palabras (6 Páginas)  •  264 Visitas

Página 1 de 6

COMPILADOR YACC

YACC significa "otro compilador de compiladores más" (del inglés Yet Another Compilers-Compiler), lo que refleja la popularidad de los generadores de analizadores sintácticos al principio de los años setenta, cuando S. C. Johnson creó la primera versión de YACC. Este generador se encuentra disponible como una orden del sistema UNIX, y se ha utilizado para facilitar la implantación de cientos de compiladores.

Para construir un traductor utilizando YACC primero se prepara un archivo.

Ejemplo traduce.y, que contiene una especificación en YACC del traductor. La orden del sistema UNIX

yacc traduce.y

transforma al archivo traduce.y en un programa escrito en C llamado y.tab.c, que implementa un analizador sintáctico escrito en C, junto con otras rutinas en C que el usuario pudo haber preparado en el fichero traduce.y. Posteriormente, se compila el fichero y.tab.c y se obtiene el programa objeto deseado que realiza la traducción especificada por el programa original en YACC. Si se necesitan otros procedimientos, se pueden compilar o cargar con y.tab.c, igual que en cualquier programa en C.

Un programa fuente en YACC tiene tres secciones:

declaraciones

%%

reglas de traducción

%%rutinas en C de apoyo

• La parte de declaraciones. Hay dos secciones opcionales en la parte de declaraciones de un programa en YACC:

o En la primera sección, se ponen declaraciones ordinarias en C, delimitadas por %{ y %}. Aquí se sitúan las declaraciones de todas las variables temporales usadas por las reglas de traducción o los procedimientos de la segunda y tercera secciones. Por ejemplo:

%{ #include <string.h> %}

También en la parte de declaraciones hay declaraciones de los componentes léxicos de la gramática. Por ejemplo:

%token DIGITO

declara que DIGITO es un componente léxico o token. Los componentes léxicos que se declaran en esta sección se pueden utilizar después en la segunda y tercera partes de la especificación en YACC.

• La parte de las reglas de traducción. En la parte de la especificación en YACC después del primer par %% se escriben las reglas de traducción. Cada regla consta de una producción de la gramática y la acción semántica asociada. Un conjunto de producciones como:

< lado izquierdo > -> < alt1 > | < alt2 > ... | < altn >

En YACC se escribiría:

< lado izquierdo > : < alt1 > { acción semántica 1 } | < alt2 > { acción semántica 2 } .... | < altn > { acción semántica n } ;

En una producción en YACC, un carácter simple entrecomillado 'c' se considera como el símbolo terminal c, y las cadenas sin comillas de letras y dígitos no declarados como componentes léxicos se consideran símbolos no terminales. Los lados derechos alternativos de las reglas se pueden separar con una barra vertical, y un símbolo de punto y coma sigue a cada lado izquierdo con sus alternativas y sus acciones semánticas. El primer lado izquierdo se considera, por defecto, como el símbolo inicial.

Una acción semántica en YACC es una secuencia de sentencias en C. En una acción semántica, el símbolo $$ se refiere al valor del atributo asociado con el no terminal del lado izquierdo, mientras que $i se refiere al valor asociado con el i-ésimo símbolo gramatical (terminal o no terminal) del lado derecho. La acción semántica se realiza siempre que se reduzca por la producción asociada, por lo que normalmente la acción semántica calcula un valor para $$ en función de los $i. Si la regla no especifica ninguna acción semántica, la acción semántica por omisión es {$$ = $1;}.

• La parte de las rutinas de apoyo en C. La tercera parte de una especificación en YACC consta de rutinas de apoyo escritas en C. Para que el analizador sintáctico funcione, se debe proporcionar un análisis léxico de nombre yylex(). En caso necesario se pueden agregar otros procedimientos, como rutinas de

...

Descargar como (para miembros actualizados)  txt (8.1 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com