Berkeley Yacc ( byacc ) es un generador de analizadores sintácticos de Unix diseñado para ser compatible con Yacc . Fue escrito originalmente por Robert Corbett y lanzado en 1989. [ 3 ] Debido a su licencia permisiva y a que era más rápido que el Yacc de AT&T, rápidamente se convirtió en la versión más popular de Yacc. [ 4 ] Tiene las ventajas de estar escrito en ANSI C89 y ser software de dominio público .
Contiene características no disponibles en Yacc, como la reentrada, que se implementa de una manera ampliamente compatible con GNU Bison . [ 5 ] [ 6 ]
Historia
En 1985, Robert Corbett desarrolló un generador de analizadores LALR original basado en un artículo de 1982 de DeRemer y Pennello. [ 7 ] Corbett lo escribió como parte de su investigación para el doctorado que recibió de la Universidad de California, Berkeley en junio de 1985. [ 8 ] [ 9 ] Originalmente se llamó Byson y era incompatible con Yacc , pero posteriormente se le cambió el nombre a Bison y se convirtió en la base de GNU Bison .
Más adelante, en 1985, Corbett desarrolló su generador de analizadores LALR, haciéndolo compatible con Yacc y llamándolo Zeus, pero posteriormente lo renombró Zoo. [ 10 ] Corbett publicó el código fuente de Zoo en un grupo de noticias de Usenet, pero pasó prácticamente desapercibido hasta finales de septiembre de 1989, cuando Corbett publicó en el grupo de noticias comp.compilers sobre la posibilidad de subir el código fuente a un servidor FTP . [ 1 ] Se debatió sobre un posible cambio de nombre y, para octubre de 1989, se le conocía como Berkeley Yacc (byacc). [ 11 ]
En 1995, Chris Dodd desarrolló BtYacc, un derivado de retroceso de Berkeley Yacc para admitir el análisis sintáctico de lenguajes sensibles al contexto como C++ , [ 12 ] [ 13 ] basado en un artículo de 1993 de Merrill que describía modificaciones similares a AT&T Yacc. [ 14 ] [ 15 ] Sus capacidades de retroceso y desambiguación semántica le permiten generar analizadores sintácticos para gramáticas ambiguas . Una regla analizada pero rechazada por la información semántica puede revertirse, de modo que el analizador pueda intentar otra regla. [ 16 ] [ 17 ] Sin embargo, también ha sido criticado por necesitar acciones de prueba sin efectos secundarios y por su manejo inflexible de conflictos de desplazamiento-reducción. [ 18 ]
En 1997, Vadim Maslov asumió el mantenimiento de BtYacc para dar soporte a un analizador sintáctico de COBOL desarrollado por su empresa. [ 19 ] Para 1999, la última versión 3.0 se había convertido a C++ , por lo que ya no se implementaba en C. [ 20 ]
En 2000, Thomas E. Dickey adaptó Berkeley Yacc a OpenVMS para facilitar la adaptación de tin a VMS. Tras no encontrar otro mantenedor, Dickey ha mantenido Berkeley Yacc desde febrero de 2002. [ 21 ] Una actualización importante fue la conversión de K&R C a ANSI C89 . [ 21 ]
En 2014, Tom Shields integró el retroceso de BtYacc en Berkeley Yacc, absorbiendo efectivamente BtYacc y volviendo a admitir C (en lugar de solo C++) en las versiones de Dickey desde abril de 2014. [ 22 ]
Idiomas
Los generadores de analizadores sintácticos suelen trabajar con tres lenguajes: el lenguaje en el que se implementa el generador, el lenguaje en el que se implementa el analizador generado y, por supuesto, el metalenguaje que describe lo que el analizador generado debe analizar. Un cuarto lenguaje podría ser el lenguaje que analiza el analizador generado, pero los generadores de analizadores no lo manejan directamente, sino que se centran en generar un analizador a partir de una descripción dada, dejando que el analizador generado se encargue de ello. Yacc está escrito en C y genera analizadores en C a partir de sus propias descripciones de metalenguaje Yacc. Así es también como funciona Berkeley Yacc (de ahí su compatibilidad); sin embargo, se han creado varias versiones derivadas para permitirle generar analizadores en lenguajes distintos de C.
Ray Lischner desarrolló perl-byacc (pbyacc) a partir de byacc 1.6, para que también pudiera generar analizadores sintácticos en Perl . Más tarde, Richard "Rick" Ohnemus portó los parches de byacc 1.6 a byacc 1.8. [ 23 ] Y más tarde, en 1996, Jake Donham desarrolló p5yacc a partir de perl-yacc 1.8.2 para que sus analizadores sintácticos de Perl generados usaran clases de Perl 5 .
En 1994, Mike Kleyn desarrolló tyacc a partir de perl-yacc 1.8.2 para que también pudiera generar analizadores sintácticos en Tcl [ 24 ].
En 1997, Bob Jamison desarrolló BYACC/Java (más tarde llamado BYACC/J o byaccj) a partir de byacc 1.8, para que también pudiera generar analizadores sintácticos en Java . [ 25 ] [ 26 ]
En 2000, Bruce Bahnsen integró las capacidades de análisis sintáctico de Java de BYACC/J en perl-yacc y añadió la capacidad de generar analizadores sintácticos en Python . [ 27 ] En 2013, Thomas Dickerson realizó nuevas mejoras, denominándolo PyByacc. [ 28 ]
En 2003, Dave Bodenstab fusionó tyacc y p5yacc para desarrollar PERL-TCL-YACC, rebasándolo a partir de la versión 4.8 de yacc de FreeBSD (un derivado de byacc). [ 29 ]
Véase también
Referencias
- 1 2 Corbett, Robert (2 de septiembre de 1989). "Generador de analizadores PD LALR(1)" . Grupo de noticias : comp.compilers . Usenet: 1989Sep2.134244.1611@esegue.uucp . Recuperado el 17 de septiembre de 2021 .
- ↑ "Índice de /archivos/byacc" .
- ↑ Doug Brown; John Levine; Tony Mason (octubre de 1992), lex & yacc (2.ª ed.), O'Reilly Media
- ↑ John Levine (agosto de 2009), flex & bison , O'Reilly Media
- ↑ "Berkeley Yacc" . invisible-island.net . Archivado del original el 19/10/2020 . Consultado el 10/11/2020 .
...compatibilidad con código reentrante, que ha evolucionado en byacc hasta el punto en que se puede comparar y ajustar con bison.
- ↑ "Registro de cambios de Berkeley Yacc, ver entrada "2010-06-07 Andres.Meji"" . 2010-06-07. Archivado del original el 2020-11-10 . Recuperado el 2020-11-10 .
- ↑ DeRemer, Frank; Pennello, Thomas (octubre de 1982). "Cálculo eficiente de conjuntos de anticipación LALR(1)" (PDF) . ACM Trans. Program. Lang. Syst. 4 (4). ACM : 615–649 . doi : 10.1145/69622.357187 . ISSN 0164-0925 . S2CID 52833742. Recuperado el 26 de agosto de 2017 .
- ↑ Corbett, Robert (24 de septiembre de 1998). "Re: ¿Alguien ha extendido MAXTABLE en los analizadores de yacc?" . Grupo de noticias : comp.compilers . Usenet: 98-09-125@comp.compilers . Consultado el 26 de agosto de 2017 .
- ↑ Corbett, Robert Paul (junio de 1985). Semántica estática y recuperación de errores del compilador (doctorado). Universidad de California, Berkeley . DTIC ADA611756 .
- ↑ Corbett, Robert (6 de septiembre de 1989). "Nombra ese generador de analizadores PD" . Grupo de noticias : comp.compilers . Usenet: 1989Sep6.152554.318@esegue.segue.boston.ma.us . Recuperado el 26 de agosto de 2017 .
- ↑ Corbett, Robert (3 de octubre de 1989). "Berkeley Yacc (nueva versión)" . Grupo de noticias : comp.compilers . Usenet: 1989Oct3.230634.1007@esegue.segue.boston.ma.us . Consultado el 17 de septiembre de 2021 .
- ↑ Dodd, Chris (7 de marzo de 1995). "BTYACC -- yacc con retroceso y atributos heredados" . Grupo de noticias : comp.compilers . Usenet: 95-03-044@comp.compilers . Consultado el 17 de septiembre de 2021 .
- ↑ "README.txt" . BtYacc: Retroceso de Yacc. Siber Systems . Consultado el 14 de mayo de 2020 .
- ↑ "README.BYACC" . Retroceso de yacc. GitHub . Consultado el 12 de agosto de 2022 .
- ↑ Merrill, Gary H. (1 de agosto de 1993). "Análisis sintáctico de gramáticas no LR(k) con yacc". Software: Practice and Experience . 23 (8): 829– 850. CiteSeerX 10.1.1.14.1958 . doi : 10.1002/spe.4380230803 . ISSN 0038-0644 . S2CID 14695500 .
- ↑ "btyacc(1)" . Debian stretch — Páginas de manual de Debian .
- ↑ Dodd, Chris (13 de febrero de 2019). "ChrisDodd/btyacc" . GitHub .
- ↑ Thurston, Adrian D.; Cordy, James R. (2006). "Un algoritmo LR de retroceso para analizar lenguajes ambiguos dependientes del contexto" (PDF) . En Erdogmus, Hakan; Stroulia, Eleni; Stewart, Darlene A. (eds.). Actas de la conferencia de 2006 del Centro de Estudios Avanzados sobre Investigación Colaborativa, 16-19 de octubre de 2006, Toronto, Ontario, Canadá . CASCON 2006. págs. 39-53 . CiteSeerX 10.1.1.518.7094 . doi : 10.1145/1188966.1188972 . Recuperado el 14 de mayo de 2020 .
- ↑ Maslov, Vadim (8 de octubre de 1997). "La versión 1.1 de BtYacc (Backtracking Yacc) está disponible" . Grupo de noticias : comp.compilers . Usenet: 97-10-039@comp.compilers . Consultado el 17 de septiembre de 2021 .
- ↑ "BtYacc: Generador de analizadores Yacc con retroceso" . Siber Systems . Consultado el 18 de mayo de 2020 .
- 1 2 "BYACC - BERKELEY YACC" . invisible-island.net . Archivado del original el 6 de abril de 2002. Consultado el 10 de noviembre de 2020 .
- ↑ "Versión t20140407" . ThomasDickey/byacc-snapshots. GitHub . Consultado el 18 de mayo de 2020 .
- ↑ "AGRADECIMIENTOS" . elfprince13/PyByacc. GitHub . 14-01-2013 . Consultado el 01-11-2021 .
- ↑ "tyacc-0.9.README" . pub/languages/tcl/ibp. ftp.funet.fi . Consultado el 1 de noviembre de 2021 .
- ↑ "Página principal de BYACC/Java" . Bob Jamison. LinCom Innovations ASG . Archivado del original el 5 de diciembre de 1998.
- ↑ "master/src/skeleton.c" . byacc/j. SourceForge . Consultado el 28 de octubre de 2021 .
- ↑ "Berkeley Yacc" . SourceForge . 8 de marzo de 2013. Consultado el 1 de noviembre de 2021 .
- ↑ "elfprince13/PyByacc" . GitHub . 14 de enero de 2013. Consultado el 1 de noviembre de 2021 .
- ↑ "BYACC, que produce analizadores sintácticos de Perl/Tcl" . Página principal de Dave Bodenstab . Archivado del original el 1 de mayo de 2021.
Enlaces externos
- Herramientas de compilación
- generadores de analizadores sintácticos
- Software libre programado en C
- Software de dominio público con código fuente