Analizando
La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la
versión revisada el 25 de diciembre de 2021; las comprobaciones requieren
2 ediciones .
El análisis sintáctico (o parsing , argot parsing ← parsing en inglés ) en lingüística e informática es el proceso de comparar una secuencia lineal de lexemas (palabras, tokens) de un lenguaje natural o formal con su gramática formal . El resultado suele ser un árbol de análisis (árbol de sintaxis). Por lo general, se utiliza junto con el análisis léxico .
Un analizador ( parser en jerga ← analizador en inglés ) es un programa o parte de un programa que realiza el análisis.
Durante el análisis, el texto de origen se convierte en una estructura de datos , generalmente un árbol, que refleja la estructura sintáctica de la secuencia de entrada y es adecuada para su posterior procesamiento.
Como regla general, el resultado del análisis sintáctico es la estructura sintáctica de la oración, presentada ya sea en forma de árbol de dependencia , o en forma de árbol de componentes , o en forma de alguna combinación del primer y segundo método de representación. .
Alcance
Cualquier cosa que tenga una " sintaxis " se presta al análisis automático.
- Lenguajes de programación : análisis del código fuente de los lenguajes de programación, en proceso de traducción ( compilación o interpretación );
- Datos estructurados: datos, idiomas para su descripción, diseño, etc. Por ejemplo, XML , HTML , CSS , JSON , archivos ini, archivos de configuración especializados, etc.;
- Construcción de un índice en un motor de búsqueda ;
- Consultas SQL ( lenguaje DSL );
- Expresiones matemáticas;
- Expresiones regulares (que a su vez pueden utilizarse para automatizar el análisis léxico );
- gramáticas formales ;
- Lingüística - lenguas naturales. Por ejemplo, traducción automática y otros generadores de texto .
- La extracción de datos de páginas web ( web scraping ) es un caso especial de análisis sintáctico [1] .
Tipos de algoritmos
- Analizador de arriba hacia abajo ( eng. top-down parser ) : los productos gramaticales se expanden, comenzando desde el carácter de inicio, hasta que se obtiene la secuencia requerida de tokens .
- Analizador ascendente ( ing. analizador de abajo hacia arriba ): los productos se restauran a partir de las partes correctas, comenzando con tokens y terminando con el carácter de inicio.
Recuperación de errores
La forma más sencilla de responder a una cadena de tokens de entrada no válida es finalizar el análisis y mostrar un mensaje de error. Sin embargo, a menudo es útil encontrar tantos errores como sea posible en un intento de análisis. Así se comportan los traductores de los lenguajes de programación más comunes.
Por lo tanto, el controlador de errores del analizador tiene las siguientes tareas:
- debe informar de manera clara y precisa la presencia de errores;
- debería proporcionar una recuperación rápida de errores para seguir buscando otros errores;
- no debería ralentizar significativamente el procesamiento de una cadena de entrada válida.
Las estrategias de recuperación de errores más conocidas se describen a continuación.
Recuperación en modo pánico
Cuando se encuentra un error, el analizador omite los tokens de entrada uno a la vez hasta que se encuentra uno de un conjunto especialmente definido de tokens de sincronización . Por lo general, estos tokens son delimitadores, por ejemplo: ; , ) o } . El conjunto de tokens de sincronización debe ser determinado por el desarrollador del lenguaje analizado. Con esta estrategia de recuperación, es posible que se omita una cantidad significativa de caracteres sin comprobar si hay errores adicionales. Esta estrategia de recuperación es la más fácil de implementar.
Recuperación de nivel de frase
A veces, cuando se encuentra un error, el analizador puede realizar una corrección local en el flujo de entrada para permitir que continúe. Por ejemplo, antes de un punto y coma que separa varias declaraciones en un lenguaje de programación, el analizador puede cerrar paréntesis que aún no se hayan cerrado. Esto es más complejo de diseñar e implementar, pero en algunas situaciones, puede funcionar significativamente mejor que la recuperación de pánico. Naturalmente, esta estrategia es impotente si el error real ocurrió antes de que el analizador lo detectara.
Producciones de errores
El conocimiento de los errores más comunes permite ampliar la gramática del idioma con producciones que generan construcciones erróneas. Cuando tales producciones se activan, se registra un error, pero el analizador continúa ejecutándose normalmente.
Herramientas de desarrollo del analizador
Las etapas separadas de desarrollo y construcción de traductores pueden ser automatizadas y realizadas por una computadora.
Estas son algunas de las herramientas de desarrollo de analizadores más conocidas [2] :
- ANTLR - generador de analizador
- Bison - generador de analizador
- Coco/R - generador de escáner y analizador
- ORO - analizador
- JavaCC - Generador de analizadores de Java
- Lemon Parser - generador de analizador
- Lex - generador de escáner
- Ragel - Generador de analizador en línea
- Spirit Parser Framework - generador de analizador
- SINTAXIS
- Sintaxis Definición Formalismo
- UltraGramo
- VivaCore
- Yacc - generador de analizador
Véase también comparación de generadores de analizadores .
Véase también
Notas
- ↑ Tim Jones M. Extraer información de Internet utilizando el lenguaje Ruby. (22 de mayo de 2014). Consultado el 13 de diciembre de 2019. Archivado desde el original el 13 de diciembre de 2019. (indefinido)
- ↑ Ela Kumar. procesamiento natural del lenguaje. - IK International Pvt Ltd, 2011. - Pág. 100. - ISBN 978-93-80578-77-4 .
Literatura
- A. Aho , J. Ullman. Teoría del análisis sintáctico, traducción y compilación. T. 1. Per. De inglés. V. N. Agafonov, ed. V. M. Kurochkina . M.: Mir, 1978. 614 p.
- A. Aho, J. Ullman. Teoría del análisis sintáctico, traducción y compilación. T. 2. Per. De inglés. A. N. Biryukov y V. A. Serebryakov , ed. V. M. Kurochkina. M.: Mir, 1978. 487 p.
- Alfred W. Aho, Monica S. Lam, Ravi Seti, Jeffrey D. Ullman. Compiladores: Principios, Técnicas y Herramientas = Compiladores: Principios, Técnicas y Herramientas. - 2ª ed. - M .: Williams , 2008. - ISBN 978-5-8459-1349-4 .
- Cazador de petirrojos. Conceptos básicos del compilador = La esencia de los compiladores. - M .: "Williams" , 2002. - S. 256. - ISBN 5-8459-0360-2 .
Enlaces