Sei sulla pagina 1di 5

Universidad Rafael Landívar

Facultad de Ingeniería
Lenguajes Formales y Autómatas
Mgtr. Diana Gutiérrez

Investigación - Analizadores sintácticos


Alumno: Bryan Estuardo Macario Coronado Carnet: 1283816

INTRODUCCIÓN

Un analizador sintáctico puede definirse como el segundo módulo de un proceso de


compilación ejecutado por un compilador, el cual transforma su entrada en un árbol
de derivación. (Anónimo, s.f.)
El análisis sintáctico es un análisis a nivel de sentencias, y es más complejo que un
analizador léxico. El análisis sintáctico se encarga de obtener del programa fuente
tokens, que provienen del analizador léxico, y ayudan a determinar la estructura de
las sentencias del programa. Un claro ejemplo de esto es escribir una frase en el
idioma español, este se compone del sujeto, predicado, verbo y los complementos
en un orden especifico.
Los árboles sintácticos se construyen con un conjunto de reglas conocidas como
gramática, y que definen con total precisión el lenguaje fuente.
El parsing se refiere al proceso de reconocer la estructura del lenguaje fuente,
también es llamado análisis sintáctico.
Existen varios softwares que tienen como función ayudar a generar analizadores
sintácticos, en esta ocasión se hará énfasis en YACC, Bison y BYACC/J, los cuales
se analizarán individualmente para determinar qué es lo que son, como funcionan,
pros y contras y las diferencias que existen entre ellos.
MARCO TEÓRICO
1. Analizador Sintáctico YACC
YACC (Yet Another Compiler-Compiler). Es un software que permite construir
analizadores gramaticales en lenguaje C a partir de una gramática libre de contexto.
Lex y Yacc son herramientas que fueron desarrolladas junto con el sistema UNIX,
es posible encontrar implementación de estos en otras plataformas como PC y
Macintosh, a la vez existen versiones de dominio público conocidos como Flex y
Bison.
Un analizador gramatical construido en Yacc genera una función que realizará el
análisis gramatical con el nombre de yyparse(); esta función solicita un token a un
analizador léxico a través de la función yylex(); es importante mencionar que el
analizador sintáctico generado en Yacc no puede funcionar por sí solo, necesita del
analizador léxico.
Un programa fuente de Yacc se parece bastante a un programa de Lex. La
diferencia principal está en la sección de reglas, que en vez de expresiones
regulares contiene las reglas de la gramática:

2. Analizador Sintáctico GNU BISON


Bison es un generador de analizadores sintácticos de propósito general que
convierte una descripción para una gramática independiente del contexto en un
programa escrito en lenguaje C que analiza dicha gramática. Es totalmente
compatible con Yacc, herramienta de Unix para la generación de analizadores
léxicos, pero es un desarrollo diferente realizado por GNU bajo licencia GPL
(General Public License). A diferencia de Yacc, Bison funciona junto a Flex para la
construcción de compiladores de lenguajes.
Una fuente de Bison(normalmente es un fichero con extensión .y) describe una
gramática. El ejecutable que se genera indica si un fichero de entrada pertenece o
no al lenguaje generado por esa gramática.
La forma general de una gramática de Bison es la siguiente:

3. Analizador Sintáctico BYACC/J


BYACC/J (Berkeley YACC / Java). Es una extensión del generador de analizadores
Berkeley v 1.8 compatible con YACC. Como se sabe YACC toma un archivo fuente
YACC y genera uno o más archivos C con la gramática descrita, que si compila
correctamente, producirá un analizador gramatical LALR.
BYACC/J es un generador de analizadores sintácticos, lo que difiere de su base
YACC es que produce código de Java en lugar de código C.
Actualmente existen otras herramientas para Java (Jacc, Java Cup) que ofrecen un
mejor análisis de las gramáticas LALR y LL.
Entre los beneficios de BYACC/J se pueden mencionar:
▪ Puede ser ejecutado desde MakeFiles e IDE’s.
▪ Esta codificado en C, por lo que la generación de código Java es bastante
rápida.
▪ El resultado en términos de bytes es bastante pequeño.
▪ Puede analizar gramáticas YACC existentes.
▪ Es gratis
La estructura de un programa BYACC/J es igual que la estrucura de un programa
YACC.
Tabla 1. Cuadro Comparativo – Analizadores Léxicos
YACC BISON BYACC/J

✓ Desarrollado sobre el sistema ✓ Desarrollado sobre el ✓ Desarrollado sobre el


UNIX. sistema GNU con licencia analizador Berkely
GPL. compatible con YACC.
✓ Trabaja junto a Lex.
✓ Trabaja en conjunto a Flex. ✓ Codificado en código C y
✓ Genera código en Lenguaje C genera código Java.
para analizar las gramáticas.
✓ Genera código en Lenguaje C ✓ El resultado es bastante
✓ Posee la misma estructura que para analizar las gramáticas. pequeño.
BISON y BYACC/J
✓ Es compatible con YACC. ✓ Es compatible con YACC.

✓ Posee la misma estructura de ✓ Posee la misma estructura de


YACC. YACC.

✓ Disponible en Windows32 y
Mac OS X.

Fuente: Propia
REFERENCIAS

1. Aho, Lam, Sethi & Ullman. (s.f.). Compiladores- principios, técnicas y


herramientas. Editorial Pearson – Addison Wesley. Segunda edición. Consultado
en Red:
http://www.udb.edu.sv/udb/archivo/guia/informaticaingenieria/compiladores/201
3/ii/guia-3.pdf

2. Anónimo. (s.f.). YACC. Consultado en Red:


http://alonso_m.tripod.com/progs/pcyacc_es.pdf

3. Simmross, F. (s.f.). El generador de analizadores sintácticos Yacc. Universidad


de Valladolid. Consultado en Red:
https://www.infor.uva.es/~mluisa/talf/docs/labo/L8.pdf

4. Hernández, R. (s.f.). Introducción a Flex y Bison. Universidad de Zaragoza.


Consultado en Red:
http://webdiis.unizar.es/asignaturas/LGA/material_2004_2005/Intro_Flex_Bison.
pdf

5. De la Cruz, M. (s.f.). Yacc / Bison. Consultado en Red:


http://arantxa.ii.uam.es/~mdlcruz/docencia/compiladores/2002_2003/compilador
es_02_03_yacc_bison.pdf

6. Anónimo. (s.f.). Analizador Sintáctico Bison. Consultado en Red:


https://es.scribd.com/presentation/40289393/Analizador-sintactico-BISON

7. Hurka, T. (2008). BYACC/J. Consultado en Red: http://byaccj.sourceforge.net/

Potrebbero piacerti anche