En el reconocimiento de lenguajes asistido por computadora, ANTLR (pronunciado «antler» ), u «Another Tool for Language Recognition» (Otra herramienta para el reconocimiento de lenguajes ), es un generador de analizadores sintácticos que utiliza un algoritmo LL(*) para el análisis. ANTLR es el sucesor del Purdue Compiler Construction Tool Set ( PCCTS ), desarrollado por primera vez en 1989, y se encuentra en desarrollo activo. Su responsable de mantenimiento es el profesor Terence Parr de la Universidad de San Francisco .
Uso
ANTLR toma como entrada una gramática que especifica un lenguaje y genera como salida código fuente para un reconocedor de ese lenguaje. Mientras que la versión 3 admitía la generación de código en los lenguajes de programación Ada95 , ActionScript , C , C# , Java , JavaScript , Objective-C , Perl , Python , Ruby y Standard ML , [ 3 ] la versión 4 actualmente apunta a C#, C++, Dart , [ 4 ] [ 5 ] Java, JavaScript, Go , PHP , Python (2 y 3) y Swift .
Un lenguaje se especifica mediante una gramática libre de contexto expresada en la Forma Extendida de Backus-Naur (EBNF). [ 6 ] ANTLR puede generar analizadores léxicos , analizadores sintácticos , analizadores sintácticos de árbol y analizadores léxicos- sintácticos combinados . Los analizadores sintácticos pueden generar automáticamente árboles de análisis sintáctico o árboles de sintaxis abstracta , que pueden procesarse posteriormente con analizadores sintácticos de árbol. ANTLR proporciona una notación única y consistente para especificar analizadores léxicos, analizadores sintácticos y analizadores sintácticos de árbol.
Por defecto, ANTLR lee una gramática y genera un reconocedor para el lenguaje definido por ella (es decir, un programa que lee un flujo de entrada y genera un error si este no se ajusta a la sintaxis especificada por la gramática). Si no hay errores de sintaxis, la acción predeterminada es simplemente salir sin imprimir ningún mensaje. Para realizar alguna acción útil con el lenguaje, se pueden adjuntar acciones a los elementos de la gramática. Estas acciones se escriben en el lenguaje de programación en el que se genera el reconocedor. Durante la generación del reconocedor, las acciones se insertan en el código fuente en los puntos correspondientes. Las acciones se pueden usar para construir y verificar tablas de símbolos y para generar instrucciones en un lenguaje de destino, en el caso de un compilador. [ 6 ]
Además de los analizadores léxicos y sintácticos, ANTLR puede utilizarse para generar analizadores sintácticos de árbol. Estos son reconocedores que procesan árboles de sintaxis abstracta, los cuales pueden ser generados automáticamente por los analizadores sintácticos. Estos analizadores de árbol son exclusivos de ANTLR y ayudan a procesar árboles de sintaxis abstracta. [ 6 ]
Licencias
ANTLR 3 y ANTLR 4 son software libre , publicado bajo una licencia BSD de tres cláusulas . [ 7 ] Las versiones anteriores se publicaron como software de dominio público . [ 8 ] La documentación, derivada del libro de Parr, The Definitive ANTLR 4 Reference , se incluye con el código fuente de ANTLR 4 con licencia BSD. [ 7 ] [ 9 ]
Se han desarrollado varios complementos para el entorno de desarrollo Eclipse para admitir la gramática ANTLR, incluido ANTLR Studio , un producto propietario , así como los complementos "ANTLR 2" [ 10 ] y "ANTLR 3" [ 11 ] para Eclipse alojados en SourceForge .
ANTLR 4
ANTLR 4 maneja correctamente la recursión izquierda directa , pero no la recursión izquierda en general, es decir, las reglas gramaticales x que se refieren a y que se refieren a x . [ 12 ]
Desarrollo
Como se informa en la página de herramientas [ 13 ] del proyecto ANTLR, los complementos que permiten características como el resaltado de sintaxis, la comprobación de errores de sintaxis y la finalización de código están disponibles gratuitamente para los IDE más comunes ( Intellij IDEA, NetBeans , Eclipse , Visual Studio [ 14 ] y Visual Studio Code ).
Proyectos
El software desarrollado con ANTLR incluye:
- Genial [ 15 ]
- Jython [ 16 ]
- Hibernar [ 17 ]
- Proyecto OpenJDK Compiler Grammar versión experimental del compilador javac basada en una gramática escrita en ANTLR [ 18 ].
- Apex , el lenguaje de programación de Salesforce.com
- El evaluador de expresiones en Numbers , la hoja de cálculo de Apple.
- Lenguaje de consulta de búsqueda de Twitter [ 19 ]
- Servidor Weblogic
- Apache Cassandra
- Tratamiento
- JabRef
- Trino (motor de consultas SQL)
- Presto (motor de consultas SQL)
- MySQL Workbench
Más de 200 gramáticas implementadas en ANTLR 4 están disponibles en GitHub . [ 20 ] Abarcan desde gramáticas para una URL hasta gramáticas para lenguajes completos como C, Java y Go.
Ejemplo
En el siguiente ejemplo, un analizador sintáctico en ANTLR describe la suma de expresiones que se puede ver en la forma "1 + 2 + 3":
// Opciones comunes, por ejemplo, las opciones del idioma de destino { language = "CSharp"; }// A continuación, la clase del analizador SumParser extiende Parser; opciones { k = 1 ; // Adelanto del analizador: 1 token }// Definición de una expresión : ENTERO ( MÁS ^ ENTERO ) * ;// Aquí está la clase Lexer SumLexer extiende Lexer; opciones { k = 1 ; // Lexer Lookahead: 1 caracteres } PLUS : '+' ; DIGIT : ( '0' .. '9' ) ; INTEGER : ( DIGIT )+ ;El siguiente listado muestra la llamada al analizador sintáctico en un programa:
TextReader lector ; // (...) Rellenar TextReader con caracteres SumLexer lexer = new SumLexer ( lector ); SumParser parser = new SumParser ( lexer );analizador.declaración ( ) ;Véase también
Referencias
- ↑ "Comp.compilers: Purdue Compiler-Construction Tool Set 1.00 disponible" . compilers.iecc.com . 10 de abril de 1992. Consultado el 5 de mayo de 2023 .
- ↑ "Comp.compilers: Más sobre PCCTS" . compilers.iecc.com . 30 de abril de 1992. Consultado el 5 de mayo de 2023 .
- ↑ Herramientas de procesamiento del lenguaje SML/NJ: Guía del usuario
- ↑ "Bibliotecas de tiempo de ejecución y objetivos de generación de código" . github . 6 de enero de 2022.
- ↑ "El entorno de ejecución ANTLR4 C++ ha llegado a su destino: Soft Gems" . 16 de noviembre de 2016.
- 1 2 3 Parr, Terence (15 de enero de 2013). La referencia definitiva de ANTLR 4. Pragmatic Bookshelf. ISBN 978-1-68050-500-9.
- 1 2 "antlr4/LICENSE.txt" . GitHub . 30-03-2017.
- ↑ Parr, Terence (5 de febrero de 2004). "Cosas de licencias" . antlr-interest (Lista de correo). Archivado del original el 18 de julio de 2011. Recuperado el 15 de diciembre de 2009 .
- ↑ "Documentación de ANTLR 4" . GitHub . 30 de marzo de 2017.
- ↑ "Complemento ANTLR para Eclipse" .
- ↑ "ANTLR IDE. Un complemento de Eclipse para gramáticas ANTLR" .
- ↑ ¿Cuál es la diferencia entre ANTLR 3 y 4?
- ↑ "Herramientas de desarrollo de ANTLR" .
- ↑ "Compatibilidad con el lenguaje ANTLR - Visual Studio Marketplace" .
- ↑ "GroovyRecognizer (Groovy 2.4.0)" .
- ↑ "Jython: 31d97f0de5fe" .
- ↑ Ebersole, Steve (06-12-2018). "Hibernate ORM 6.0.0.Alpha1 lanzado" . En relación con, el blog del equipo de Hibernate sobre todo lo relacionado con datos . Recuperado el 11-07-2020 .
- ↑ "OpenJDK: Gramática del compilador" .
- ↑ "Testimonios de ANTLR" . Consultado el 30 de octubre de 2024 .
- ↑ Gramáticas escritas para ANTLR v4; se espera que las gramáticas estén libres de acciones: antlr/grammars-v4 , Proyecto Antlr, 25/09/2019 , consultado el 25/09/2019.
Bibliografía
- Parr, Terence (17 de mayo de 2007), The Definitive Antlr Reference: Building Domain-Specific Languages (1.ª ed.), Pragmatic Bookshelf , pág. 376, ISBN 978-0-9787392-5-6Archivado del original el 18/11/2021 , consultado el 16/06/2008.
- Parr, Terence (diciembre de 2009), Patrones de implementación de lenguajes: Cree sus propios lenguajes de programación generales y específicos de dominio (1.ª ed.), Pragmatic Bookshelf , pág. 374, ISBN 978-1-934356-45-6Archivado del original el 29/10/2021 , consultado el 06/07/2010.
- Parr, Terence (15 de enero de 2013), The Definitive ANTLR 4 Reference (1.ª ed.), Pragmatic Bookshelf , pág. 328, ISBN 978-1-93435-699-9
Lecturas adicionales
Enlaces externos
- Sitio web oficial
- Software de 1992
- generadores de analizadores sintácticos
- Software que utiliza la licencia BSD.
- Software de dominio público