Yacc
Yacc es un programa para generar analizadores sintácticos. Las siglas del nombre significan Yet Another Compiler-Compiler, es decir, "Otro generador de compiladores más". Genera un analizador sintáctico (la parte de un compilador que comprueba que la estructura del código fuente se ajusta a la especificación sintáctica del lenguaje) basado en una gramática analítica escrita en una notación similar a la BNF. Yacc genera el código para el analizador sintáctico en el Lenguaje de programación C.
Fue desarrollado por Stephen C. Johnson en AT&T para el sistema operativo Unix. Después se escribieron programas compatibles, por ejemplo Berkeley Yacc, GNU bison, MKS yacc y Abraxas yacc (una versión actualizada de la versión original de AT&T que también es software libre como parte del proyecto de OpenSolaris de Sun). Cada una ofrece mejoras leves y características adicionales sobre el Yacc original, pero el concepto ha seguido siendo igual. Yacc también se ha reescrito para otros lenguajes, incluyendo Ratfor, EFL, ML, Ada, Java, y Limbo.
Puesto que el analizador sintáctico generado por Yacc requiere un analizador léxico, se utiliza a menudo conjuntamente con un generador de analizador léxico, en la mayoría de los casos lex o Flex, alternativa del software libre. El estándar de IEEE POSIX P1003.2 define la funcionalidad y los requisitos a Lex y Yacc.
La versión Yacc de AT&T se convirtió en software libre; el código fuente está disponible con las distribuciones estándares del Plan 9 y de OpenSolaris.
Véase también
editar- Analizador sintáctico LALR: el algoritmo de análisis subyacente en Yacc.
- GNU bison: generador de analizadores sintácticos compatible con Yacc.
Referencias
editar- Stephen C. Johnson. YACC: Yet another compiler-compiler. Unix Programmer's Manual Vol 2b, 1979.
Enlaces externos
editar- Código fuente (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). del yacc de AT&T usado en OpenSolaris.
- Berkeley Yacc Archivado el 6 de febrero de 2007 en Wayback Machine.: variante de yacc escrita para evitar dependencias de algún compilador de C en particular.
- Essence, un generador de analizadores LR(1) para Scheme.
- ML-Yacc, una versión de yacc para el lenguaje Standard ML.
- CL-Yacc, un generador de analizadores LALR(1) para Common Lisp.
- Yecc, una versión de yacc para Erlang.
- Happy, un generador de analizadores similar a yacc para Haskell.
- A Compact Guide to lex & yacc (Una guía compacta a lex & yacc).