En el reconocimiento de lenguaje basado en computadora, ANTLR ( asta pronunciada ), u otra herramienta para el reconocimiento de lenguaje , es un generador de analizador sintáctico que usa LL (*) para el análisis sintáctico. ANTLR es el sucesor del Purdue Compiler Construction Tool Set ( PCCTS ), desarrollado por primera vez en 1989 y está en desarrollo activo. Su responsable es el profesor Terence Parr de la Universidad de San Francisco . [ cita requerida ]
Autor (es) original (es) | Terence Parr y otros |
---|---|
Versión inicial | Febrero de 1992 |
Lanzamiento estable | 4.9.2 / 11 de marzo de 2021 |
Repositorio | |
Escrito en | Java |
Plataforma | Multiplataforma |
Licencia | Licencia BSD |
Sitio web | www |
Uso
ANTLR toma como entrada una gramática que especifica un idioma y genera como salida un código fuente para un reconocedor de ese idioma. Si bien 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 , [1] la versión actual en la actualidad solo tiene como objetivo Java, C #, C ++, [2] JavaScript, Python, Swift y Go . Un idioma se especifica utilizando una gramática libre de contexto expresada mediante Extended Backus – Naur Form (EBNF). [ cita requerida ]
Antlr puede generar lexers , analizadores , analizadores de árboles , y combinados lexer-analizadores . Los analizadores pueden generar automáticamente árboles de análisis sintáctico o árboles de sintaxis abstracta , que pueden procesarse más con analizadores de árboles. ANTLR proporciona una única notación coherente para especificar léxers, analizadores sintácticos y analizadores de árbol.
Por defecto, ANTLR lee una gramática y genera un reconocedor para el lenguaje definido por la gramática (es decir, un programa que lee un flujo de entrada y genera un error si el flujo de entrada 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 hacer algo útil con el lenguaje, se pueden adjuntar acciones a elementos gramaticales en la gramática. Estas acciones están escritas en el lenguaje de programación en el que se genera el reconocedor. Cuando se genera el reconocedor, las acciones se incrustan en el código fuente del reconocedor en los puntos apropiados. Las acciones se pueden usar para construir y verificar tablas de símbolos y para emitir instrucciones en un idioma de destino, en el caso de un compilador. [ cita requerida ]
Además de los lexers y analizadores, ANTLR se puede utilizar para generar analizadores de árbol. Estos son reconocedores que procesan árboles de sintaxis abstracta, que pueden ser generados automáticamente por analizadores. Estos analizadores de árboles son exclusivos de ANTLR y ayudan a procesar árboles de sintaxis abstracta. [ cita requerida ]
Licencia
ANTLR 3 [ cita requerida ] y ANTLR 4 son software libre , publicado bajo una licencia BSD de tres cláusulas . [3] Las versiones anteriores se lanzaron como software de dominio público . [4] La documentación, derivada del libro de Parr The Definitive ANTLR 4 Reference , se incluye con la fuente de ANTLR 4 con licencia BSD. [3] [5]
Se han desarrollado varios complementos para el entorno de desarrollo de Eclipse para admitir la gramática ANTLR, incluido ANTLR Studio , un producto propietario , así como los complementos "ANTLR 2" [6] y "ANTLR 3" [7] para Eclipse alojado en SourceForge . [ cita requerida ]
ANTLR 4
ANTLR 4 trata correctamente la recursividad izquierda directa , pero no la recursividad izquierda en general, es decir, las reglas gramaticales x que se refieren ay que se refieren a x . [8]
Desarrollo
Como se informa en la página de herramientas [9] del proyecto ANTLR, los complementos que habilitan características como resaltado de sintaxis, verificación de errores de sintaxis y finalización de código están disponibles gratuitamente para los IDE más comunes ( Intellij IDEA, NetBeans , Eclipse, Visual Studio [10 ] y Visual Studio Code ).
Proyectos
Aquí hay una lista no completa de software creado con ANTLR:
- Maravilloso . [11]
- Jython . [12]
- Hibernar [13]
- OpenJDK Compiler Grammar proyecto versión experimental del compilador javac basado en una gramática escrita en ANTLR. [14]
- Apex , el lenguaje de programación de Salesforce.com . [ cita requerida ]
- El evaluador de expresiones en Numbers , la hoja de cálculo de Apple. [ cita requerida ]
- Idioma de consulta de búsqueda de Twitter . [ cita requerida ]
- Servidor de Weblogic. [ cita requerida ]
- Apache Cassandra . [ cita requerida ]
- Procesamiento . [ cita requerida ]
- JabRef . [ cita requerida ]
- Presto (motor de consultas SQL)
- Banco de trabajo MySQL
Más de 200 gramáticas implementadas en ANTLR 4 están disponibles en Github . [15] Varían desde gramáticas para una URL hasta gramáticas para lenguajes completos como C, Java y Go.
Ejemplo
En el siguiente ejemplo, un analizador en ANTLR describe la suma de expresiones que se pueden ver en forma de "1 + 2 + 3":
// Opciones comunes, por ejemplo, el idioma de destino opciones { language = "CSharp"; } // Seguido por el analizador la clase SumParser extiende el analizador; opciones { k = 1 ; // Analizador anticipado: 1 token } // Definición de una expresión declaración : INTEGER ( PLUS ^ INTEGER ) * ; // Aquí está el Lexer la clase SumLexer extiende Lexer; opciones { k = 1 ; // Lexer Lookahead: 1 caracteres } MÁS : '+' ; DÍGITO : ( '0' .. '9' ) ; INTEGER : ( DÍGITO ) + ;
La siguiente lista muestra la llamada del analizador en un programa:
Lector de TextReader ; // (...) Llenar TextReader con carácter SumLexer lexer = nueva SumLexer ( lector ); SumParser parser = nuevo SumParser ( lexer ); analizador . declaración ();
Ver también
- Coco / R
- Kit de herramientas de reingeniería de software DMS
- JavaCC
- Formalismo de definición de sintaxis modular
- Sancochado (Java)
- Analizar la gramática de la expresión
- SableCC
Referencias
- ^ Herramientas de procesamiento de idiomas SML / NJ: Guía del usuario
- ^ https://soft-gems.net/the-antlr4-c-runtime-reached-home
- ^ a b "antlr4 / LICENSE.txt" . GitHub . 2017-03-30.
- ^ Parr, Terence (5 de febrero de 2004). "material de licencias" . antlr-interest (lista de correo). Archivado desde el original el 18 de julio de 2011 . Consultado el 15 de diciembre de 2009 .
- ^ "Documentación ANTLR 4" . GitHub . 2017-03-30.
- ^ http://antlreclipse.sourceforge.net
- ^ http://antlrv3ide.sourceforge.net
- ^ ¿Cuál es la diferencia entre ANTLR 3 y 4?
- ^ http://www.antlr.org/tools.html
- ^ https://marketplace.visualstudio.com/items?itemName=SamHarwell.ANTLRLanguageSupport
- ^ http://docs.groovy-lang.org/2.4.0/html/api/org/codehaus/groovy/antlr/parser/GroovyRecognizer.html
- ^ https://hg.python.org/jython/rev/31d97f0de5fe
- ^ Ebersole, Steve (6 de diciembre de 2018). "Hibernate ORM 6.0.0.Alpha1 lanzado" . En relación con, el blog del equipo de Hibernate sobre todos los datos . Consultado el 11 de julio de 2020 .
- ^ https://openjdk.java.net/projects/compiler-grammar/
- ^ Gramáticas escritas para ANTLR v4; expectativa de que las gramáticas estén libres de acciones .: antlr / grammars-v4 , Antlr Project, 2019-09-25 , consultado el 2019-09-25
Bibliografía
- Parr, Terence (17 de mayo de 2007), The Definitive Antlr Reference: Building Domain-Specific Languages (1ª ed.), Pragmatic Bookshelf , p. 376, ISBN 978-0-9787392-5-6
- Parr, Terence (diciembre de 2009), Patrones de implementación del lenguaje: Cree sus propios lenguajes de programación generales y específicos de dominio (1ª ed.), Pragmatic Bookshelf , p. 374, ISBN 978-1-934356-45-6
- Parr, Terence (15 de enero de 2013), The Definitive ANTLR 4 Reference (1ª ed.), Pragmatic Bookshelf , p. 328, ISBN 978-1-93435-699-9
Otras lecturas
- Parr, TJ; Quong, RW (julio de 1995). "ANTLR: un generador de analizador LL (k) predicado". Software: práctica y experiencia . 25 (7): 789–810. CiteSeerX 10.1.1.54.6015 . doi : 10.1002 / spe.4380250705 . S2CID 13453016 .
enlaces externos
- Página web oficial
- Tutorial ANTLR (mega)
- ¿Por qué utilizar ANTLR?
- Estudio ANTLR