Algoritmo eficiente para actualizar un árbol de análisis


14

Digamos que tengo un gran bloque de código que ya he lexed y analizado.
Supongamos que solo un personaje cambia; Me gustaría actualizar mi análisis, pero dado que la modificación es muy pequeña en comparación con todo, me gustaría saber si es posible no analizar todo nuevamente, pero si hay algoritmos para determinar el rango para volver a analizar , y para tratar adecuadamente los límites de token en movimiento.

¡Gracias por adelantado!


1
Hola y bienvenido! No soy un experto en el tema, pero creo que la palabra clave que estás buscando es el análisis sintáctico incrementales o compilación incrementales .
MS Dousti

@Sadeq gracias por el puntero! ¿Consideraría agregar una respuesta con algunos detalles? Sería muy apreciado!
Agos

Respuestas:


9

Según la solicitud de @Agos, convertí el comentario en una respuesta.

Primero, debo admitir que no estoy realmente bien informado en este campo. Sin embargo, le sugiero que lea los documentos Creación de analizadores amigables y Análisis incremental eficiente y flexible para tener una visión de qué algoritmos se utilizaron para el análisis incremental antes de 2000.

Para tratamientos actualizados, puede consultar estos documentos:

Más información: Hay (al menos) dos enfoques para el análisis / compilación:

  • El lote enfoque, en el que se analiza todo el bloque de código / compilado.
  • El enfoque incremental , en el que el documento primero se analiza / compila en el modo por lotes, y luego se detectan los cambios y se aplica el mínimo análisis / recompilación. Este enfoque no solo aumenta la velocidad de análisis / compilación, sino que también ayuda en las características ingeniosas de IDE, como la compilación en segundo plano , que está relacionada con la compilación diferida . (También puede buscar funciones comerciales como IntelliSense ).

1

si su analizador incremental guarda el estado en cada extremo de la línea, vuelve a analizar solo desde el último estado válido del analizador (en el mejor de los casos, por ejemplo, después de un análisis completo, este es solo el comienzo de la línea donde comienza la modificación) y deja de analizar al final de la línea donde termina la modificación (el analizador interno podría mirar más allá de la modificación para reconocer correctamente la estructura)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.