stringtranslate.com

Colegio de Abogados de Berkeley

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 liberal y a que era más rápido que el AT&T Yacc, 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 que es ampliamente compatible con GNU Bison . [5] [6]

Historia

En 1985, Robert Corbett desarrolló un generador de analizador 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 llamaba Byson y era incompatible con Yacc, pero posteriormente se renombró Bison y se convirtió en la base de GNU Bison .

Más tarde, en 1985, Corbett desarrolló su generador de analizador LALR, haciéndolo compatible con Yacc y llamándolo Zeus, pero posteriormente renombrándolo Zoo. [10] Corbett publicó el código fuente de Zoo en un grupo de noticias de Usenet, pero pasó desapercibido hasta más tarde, en septiembre de 1989, cuando Corbett publicó en el grupo de noticias comp.compilers sobre poner el código fuente en un servidor FTP . [1] Hubo una discusión sobre cambiarle el nombre y en octubre de 1989 se lo conocía como Berkeley Yacc (byacc). [11]

En 1995, Chris Dodd desarrolló BtYacc, un derivado de retroceso de Berkeley Yacc para soportar el análisis de lenguajes sensibles al contexto como C++ , [12] [13] basado en un artículo de 1993 de Merrill que describe modificaciones similares a AT&T Yacc. [14] [15] Sus capacidades de retroceso y desambiguación semántica le permiten generar analizadores para gramáticas ambiguas . Una regla analizada pero rechazada por información semántica se puede revertir, de modo que el analizador pueda probar otra regla. [16] [17] Sin embargo, también ha sido criticado por necesitar acciones de prueba gratuitas de efectos secundarios y su manejo inflexible de conflictos de reducción de desplazamiento. [18]

En 1997, Vadim Maslov se hizo cargo del mantenimiento de BtYacc para dar soporte a un analizador COBOL desarrollado por su empresa. [19] En 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 trasladó Berkeley Yacc a OpenVMS para facilitar la migración de tin a VMS. Después de no poder encontrar otro mantenedor, Dickey ha mantenido Berkeley Yacc desde febrero de 2002. [21] Una actualización significativa fue la conversión de K&R C a ANSI C89 . [21]

En 2014, Tom Shields integró el backtracking de BtYacc en Berkeley Yacc, subsumiendo efectivamente a BtYacc y nuevamente admitiendo 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 un generador, el lenguaje en el que se implementa un analizador sintáctico generado y, por supuesto, el metalenguaje que describe lo que debe analizar un analizador sintáctico generado. Se podría considerar un cuarto lenguaje, cualquiera que sea el lenguaje que analiza un analizador sintáctico generado, pero los generadores de analizadores sintácticos no lo manejan directamente, sino que se centran en generar un analizador sintáctico a partir de una descripción dada mientras dejan que el analizador sintáctico generado se ocupe de ello. Yacc está escrito en C y genera analizadores sintácticos en C a partir de sus propias descripciones en metalenguaje Yacc. Así es también como funciona Berkely Yacc (de ahí su compatibilidad), sin embargo, se han creado varios derivados para permitirle generar analizadores sintácticos en lenguajes distintos de C.

Ray Lischner desarrolló perl-byacc (pbyacc) a partir de byacc 1.6, de modo que también pudiera generar analizadores sintácticos en Perl . Más tarde, Richard "Rick" Ohnemus trasladó 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 de modo que sus analizadores sintácticos Perl generados utilizaran 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 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 en Java . [25] [26]

En 2000, Bruce Bahnsen fusionó las capacidades del analizador Java de BYACC/J en perl-yacc y agregó la capacidad de generar analizadores en Python . [27] En 2013, Thomas Dickerson realizó más mejoras y lo denominó PyByacc. [28]

En 2003, Dave Bodenstab fusionó tyacc y p5yacc para desarrollar un PERL-TCL-YACC basado en la versión 4.8 de yacc de FreeBSD (un derivado de byacc). [29]

Véase también

Referencias

  1. ^ ab Corbett, Robert (2 de septiembre de 1989). "Generador de analizador sintáctico PD LALR(1)". Grupo de noticias : comp.compilers. Usenet:  [email protected] . Consultado el 17 de septiembre de 2021 .
  2. ^ "Índice de /archives/byacc".
  3. ^ Doug Brown; John Levine; Tony Mason (octubre de 1992), lex & yacc (2.ª edición), O'Reilly Media
  4. ^ John Levine (agosto de 2009), flex & bison , O'Reilly Media
  5. ^ "Berkeley Yacc". invisible-island.net . Archivado desde el original el 19 de octubre de 2020 . Consultado el 10 de noviembre de 2020 . ...soporte para código reentrante, que ha evolucionado en byacc hasta el punto en que se puede comparar y ajustar con bison.
  6. ^ "Registro de cambios de Berkeley Yacc, ver entrada "2010-06-07 Andres.Meji"". 2010-06-07. Archivado desde el original el 2020-11-10 . Consultado el 2020-11-10 .
  7. ^ 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 . Consultado el 26 de agosto de 2017 .
  8. ^ Corbett, Robert (24 de septiembre de 1998). "Re: ¿Alguien ha extendido MAXTABLE en los analizadores yacc?". Grupo de noticias : comp.compilers. Usenet:  [email protected] . Consultado el 26 de agosto de 2017 .
  9. ^ Corbett, Robert Paul (junio de 1985). Semántica estática y recuperación de errores del compilador (Ph.D.). Universidad de California, Berkeley . DTIC ADA611756.
  10. ^ Corbett, Robert (6 de septiembre de 1989). "Name that PD parser generator". Grupo de noticias : comp.compilers. Usenet:  [email protected] . Consultado el 26 de agosto de 2017 .
  11. ^ Corbett, Robert (3 de octubre de 1989). "Berkeley Yacc (nueva versión)". Grupo de noticias : comp.compilers. Usenet:  [email protected] . Consultado el 17 de septiembre de 2021 .
  12. ^ Dodd, Chris (7 de marzo de 1995). "BTYACC -- yacc con retroceso y atributos heredados". Grupo de noticias : comp.compilers. Usenet:  [email protected] . Consultado el 17 de septiembre de 2021 .
  13. ^ "README.txt". BtYacc: BackTracking Yacc. Siber Systems . Consultado el 14 de mayo de 2020 .
  14. ^ "README.BYACC". Retroceso a yacc. GitHub . Consultado el 12 de agosto de 2022 .
  15. ^ Merrill, Gary H. (1 de agosto de 1993). "Análisis de gramáticas no LR(k) con yacc". Software: práctica y experiencia . 23 (8): 829–850. CiteSeerX 10.1.1.14.1958 . doi :10.1002/spe.4380230803. ISSN  0038-0644. S2CID  14695500. 
  16. ^ "btyacc(1)". Debian stretch — Páginas de manual de Debian .
  17. ^ Dodd, Chris (13 de febrero de 2019). «ChrisDodd/btyacc». GitHub .
  18. ^ Thurston, Adrian D.; Cordy, James R. (2006). "Un algoritmo LR de seguimiento hacia atrás 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 . Consultado el 14 de mayo de 2020 . 
  19. ^ Maslov, Vadim (8 de octubre de 1997). "La versión 1.1 de BtYacc (Backtracking Yacc) está disponible". Grupo de noticias : comp.compilers. Usenet:  [email protected] . Consultado el 17 de septiembre de 2021 .
  20. ^ "BtYacc: generador de analizador sintáctico Yacc con seguimiento hacia atrás". Siber Systems . Consultado el 18 de mayo de 2020 .
  21. ^ ab "BYACC - BERKELEY YACC". invisible-island.net . Archivado desde el original el 2002-04-06 . Consultado el 2020-11-10 .
  22. ^ "Versión t20140407". ThomasDickey/byacc-snapshots. GitHub . Consultado el 18 de mayo de 2020 .
  23. ^ "AGRADECIMIENTOS". elfprince13/PyByacc. GitHub . 2013-01-14 . Consultado el 2021-11-01 .
  24. ^ "tyacc-0.9.README". pub/languages/tcl/ibp. ftp.funet.fi . Consultado el 1 de noviembre de 2021 .
  25. ^ "Página de inicio de BYACC/Java". Bob Jamison. LinCom Innovations ASG . Archivado desde el original el 5 de diciembre de 1998.
  26. ^ "master/src/skeleton.c". por acc/j. SourceForge . Consultado el 28 de octubre de 2021 .
  27. ^ "Berkeley Yacc". SourceForge . Consultado el 1 de noviembre de 2021 .
  28. ^ "elfprince13/PyByacc". GitHub . 2013-01-14 . Consultado el 2021-11-01 .
  29. ^ "BYACC, que produce analizadores Perl/Tcl". Página de inicio de Dave Bodenstab . Archivado desde el original el 1 de mayo de 2021.

Enlaces externos