Articulo de referencia

Comparación de generadores de analizadores sintácticos

Esta es una lista de generadores de analizadores léxicos y sintácticos destacados para diversas clases de lenguajes. Lenguas regulares Los lenguajes regulares son una categoría ...

Esta es una lista de generadores de analizadores léxicos y sintácticos destacados para diversas clases de lenguajes.

Lenguas regulares

Los lenguajes regulares son una categoría de lenguajes (a veces denominados de tipo 3 de Chomsky ) que pueden ser representados por una máquina de estados (más específicamente, por un autómata finito determinista o no determinista ) construida a partir de una expresión regular . En particular, un lenguaje regular puede representar construcciones como "A sigue a B", "A o B", "A, seguido de cero o más instancias de B", pero no puede representar construcciones que requieren consistencia entre elementos no adyacentes, como "algunas instancias de A seguidas por el mismo número de instancias de B", y tampoco puede expresar el concepto de "anidamiento" recursivo ("cada A es seguido eventualmente por un B correspondiente"). Un ejemplo clásico de un problema que una gramática regular no puede manejar es la cuestión de si una cadena dada contiene paréntesis correctamente anidados. (Esto generalmente lo maneja una gramática de tipo 2 de Chomsky, también denominada gramática libre de contexto ).

Lenguajes deterministas libres de contexto

Los lenguajes libres de contexto son una categoría de lenguajes (a veces denominados de tipo 2 de Chomsky ) que pueden ser emparejados por una secuencia de reglas de reemplazo, cada una de las cuales esencialmente asigna cada elemento no terminal a una secuencia de elementos terminales y/u otros elementos no terminales. Las gramáticas de este tipo pueden emparejar cualquier cosa que pueda ser emparejada por una gramática regular y, además, pueden manejar el concepto de "anidamiento" recursivo ("cada A es seguido eventualmente por un B correspondiente"), como la cuestión de si una cadena dada contiene paréntesis correctamente anidados. Sin embargo, las reglas de las gramáticas libres de contexto son puramente locales y, por lo tanto, no pueden manejar preguntas que requieren análisis no local, como "¿Existe una declaración para cada variable que se usa en una función?". Para hacerlo técnicamente se requeriría una gramática más sofisticada, como una gramática de tipo 1 de Chomsky, también denominada gramática sensible al contexto . Sin embargo, los generadores de analizadores sintácticos para gramáticas libres de contexto suelen permitir que el código escrito por el usuario introduzca una sensibilidad al contexto limitada. (Por ejemplo, al encontrar una declaración de variable, el código escrito por el usuario podría guardar el nombre y el tipo de la variable en una estructura de datos externa, de modo que estos se puedan comparar con referencias a variables detectadas posteriormente por el analizador).

Los lenguajes libres de contexto deterministas son un subconjunto propio de los lenguajes libres de contexto que pueden ser analizados eficientemente por autómatas de pila deterministas .

Análisis sintáctico de gramáticas de expresiones, gramáticas booleanas deterministas

Esta tabla compara los generadores de analizadores sintácticos con las gramáticas de expresiones de análisis sintáctico y las gramáticas booleanas deterministas .

Lenguajes generales libres de contexto, conjuntivos o booleanos

Esta tabla compara los lenguajes generadores de analizadores sintácticos con una gramática general libre de contexto , una gramática conjuntiva o una gramática booleana .

Gramáticas sensibles al contexto

Esta tabla compara los generadores de analizadores sintácticos con las gramáticas sensibles al contexto .

Véase también

Referencias

  1. "Compilador de máquina de estados Ragel" .
  2. http://www.colm.net/open-source/ragel/
  3. "Análisis sintáctico adaptativo LL(*): El poder del análisis dinámico" (PDF) . Terence Parr . Consultado el 3 de abril de 2016 .
  4. Boyland, John; Spiewak, Daniel (17 de septiembre de 2010). "Tool Paper: ScalaBison Recursive Ascent-Descent Parser Generator" . Electronic Notes in Theoretical Computer Science . Actas del Noveno Taller sobre Herramientas y Aplicaciones de Descripciones de Lenguajes (LDTA 2009). 253 (7): 65–74 . doi : 10.1016/j.entcs.2010.08.032 . ISSN 1571-0661 . 
  5. "Beaver - un generador de analizadores LALR" . beaver.sourceforge.net . Consultado el 16 de septiembre de 2023 .
  6. Newton, Jim E.; Demaille, Akim; Verna, Didier (09/05/2016). "Verificación de tipos de secuencias heterogéneas en Common Lisp" (PDF) . Actas del 9.º Simposio Europeo de Lisp . ELS2016. Cracovia, Polonia: Asociación Europea de Actividades Científicas de Lisp: 13–20 . ISBN 978-2-9557474-0-7.
  7. "CL-Yacc — un generador de analizadores LALR(1) para Common Lisp" . www.irif.fr. Consultado el 16 de septiembre de 2023 .
  8. Hosseinpour, Sahereh; Alavi Milani, Mir Mohammad Reza; Pehlivan, Hüseyin (julio de 2018). "Una metodología de solución paso a paso para expresiones matemáticas" . Symmetry . 10 (7): 285. Bibcode : 2018Symm...10..285H . doi : 10.3390/sym10070285 . ISSN 2073-8994 . 
  9. "Página principal de CppCC" . cppcc.sourceforge.net . Consultado el 16 de septiembre de 2023 .
  10. "Java Cup" . pages.cs.wisc.edu . Consultado el 16 de septiembre de 2023 .
  11. "CUP" . www2.cs.tum.edu . Consultado el 16 de septiembre de 2023 .
  12. Thiemann, Peter; Neubauer, Matthias (31 de diciembre de 2004). "Análisis sintáctico LR parametrizado" . Electronic Notes in Theoretical Computer Science . Actas del Cuarto Taller sobre Descripciones, Herramientas y Aplicaciones de Lenguajes (LDTA 2004). 110 : 115–132 . doi : 10.1016/j.entcs.2004.06.007 . ISSN 1571-0661 . 
  13. Gray, Robert W.; Levi, Steven P.; Heuring, Vincent P.; Sloane, Anthony M.; Waite, William M. (1992). "Eli: un sistema completo y flexible de construcción de compiladores" . Communications of the ACM . 35 (2): 121– 130. doi : 10.1145/129630.129637 . ISSN 0001-0782 . S2CID 5121773 .  
  14. Owens, Scott; Flatt, M.; Shivers, O.; McMullan, Benjamin (2004-10-01). "Generadores de analizadores léxicos y sintácticos en Scheme" (PDF) . Scheme 2004: Actas del Quinto Taller sobre Scheme y Programación Funcional .
  15. 1 2 Areias, Hugo; Simões, Alberto; Henriques, P.; Cruz, Daniela Carneiro da (2010-09-01). Generación de analizadores sintácticos en Perl: una descripción general y herramientas disponibles (PDF) . Compiladores, lenguajes de programación, tecnologías relacionadas y aplicaciones 2010.
  16. Volkman, Victor (19 de julio de 2007). "Deja que tu analizador vaya a por el ORO" . Developer.com . Recuperado el 4 de noviembre de 2023 .
  17. "Análisis sintáctico en C#: Todas las herramientas y bibliotecas que puede usar (Parte 2) - DZone" . dzone.com . Consultado el 4 de noviembre de 2023 .
  18. ^ Ortín, Francisco; Quiroga, José; Rodríguez-Prieto, Oscar; García, Miguel (03-03-2022). "Una evaluación empírica de las herramientas de generación de analizadores Lex/Yacc y ANTLR" . MÁS UNO . 17 (3) e0264326. Código Bib : 2022PLoSO..1764326O . doi : 10.1371/journal.pone.0264326 . ISSN 1932-6203 . PMC 8893623 . PMID 35239695 .   
  19. Enseling, Oliver (29-12-2000). "Crea tus propios lenguajes con JavaCC" . InfoWorld . Consultado el 04-11-2023 .
  20. "JavaCC" . JavaCC . Consultado el 4 de noviembre de 2023 .
  21. "Construyendo analizadores sintácticos para la web con JavaCC y GWT (Parte uno)" . Chris Ainsley. 14 de abril de 2014. Recuperado el 4 de mayo de 2014 .
  22. " [ Lark ] Referencia gramatical" . lark-parser.readthedocs.io . Sintaxis general y notas . Consultado el 14 de junio de 2026 .
  23. "El generador de analizadores Lemon" . sqlite.org . Consultado el 30 de noviembre de 2023 .
  24. «El sistema analizador Lezer» .
  25. "Creación de un editor de código ShopifyQL" . Shopify . Consultado el 6 de diciembre de 2023 .
  26. ^ "Patrocinio del sistema analizador Lezer | Tines" . www.tines.com . 2022-03-11 . Consultado el 6 de diciembre de 2023 .
  27. "Un generador de analizadores LR(*) para C++" .
  28. "Racc" . i.loveruby.net . Consultado el 26 de noviembre de 2021 .
  29. "Racc Grammar File Reference" . i.loveruby.net . Consultado el 26/11/2021 .
  30. "El generador de analizadores REX admite C, C++, Java, JavaScript, C#, Go, Haxe, Python, Scala, Typescript, XQuery y XSLT" .
  31. "El generador de analizadores SLK admite C, C++, Java, JavaScript y C#, retroceso opcional, gratuito" .
  32. "Acuerdo de licencia" . Archivado del original (TXT) el 17 de febrero de 2016.
  33. "SLY (Sly Lex Yacc)" .
  34. "Tree-Sitter: un sistema de análisis incremental para herramientas de programación" .
  35. Adam Ślosarski (2007). "Visual BNF: software para definir gramáticas formales (LALR) y generación de analizadores sintácticos para .net framework" . Intralogic .
  36. "Parse - Generador de analizadores sintácticos seguros en tiempo de compilación (LR) para C++" . GitHub . 30 de diciembre de 2021.
  37. ^ Kuramitsu, Kimio (26 de noviembre de 2015), Nez: lenguaje práctico de gramática abierta , arXiv : 1511.08307
  38. Bifurcación mantenida de PEG.js
  39. taocpp/PEGTL , El arte de C++, 14 de marzo de 2024 , consultado el 16 de marzo de 2024
  40. "Parrot: Grammar Engine" . The Parrot Foundation. 2011. Las reglas PGE proporcionan toda la potencia del análisis sintáctico descendente recursivo y el análisis sintáctico de precedencia de operadores.
  41. "Resumen de la declaración (Bison 3.8.1)" . www.gnu.org .
  • El catálogo de herramientas para la construcción de compiladores se archivó el 13 de agosto de 2011 en la Wayback Machine.
  • Generadores de analizadores sintácticos de código abierto en Java