parsing vbscript antlr gold-parser

parsing - Analizador parcial de VBScript



antlr gold-parser (2)

Estoy intentando crear un analizador de VBScript. Me preguntaba cuál es la mejor manera de hacerlo. He investigado e investigado. La forma más popular parece ser algo como Gold Parser o ANTLR.

La característica que deseo implementar es hacer una comprobación dinámica de errores de sintaxis en VBScript. No quiero compilar todo el VBS cada vez que cambia el texto. ¿Cómo hago eso? Traté de usar Gold Parser, pero supongo que no hay forma incremental de analizarlo, algo así como árboles de análisis parciales ... ¿Alguna idea sobre cómo implementar un árbol de análisis parcial para tal escenario?

Implementé VBscript Parsing a través de GOLD Parser. Sin embargo, todavía no es un analizador parcial, analiza todo el script después de cada cambio de texto. ¿Hay alguna manera de construir tal cosa?

thks


Primero buscaría un analizador de VBScript existente en lugar de escribir el tuyo, ¡lo cual no es una tarea trivial!

Hay una gramática de VBScript en formato BNF en esta página: http://rosettacode.org/wiki/BNF_Grammar, que puede traducir a una gramática ANTLR (o algún otro generador de analizadores).

Antes de intentar hacer cosas sofisticadas como volver a analizar solo una parte de la fuente, te recomiendo primero que crees un analizador que realmente funciona.

¡La mejor de las suertes!


Si realmente quieres hacer un análisis incremental, considera este artículo de Tim Wagner.

Es brillante el esquema para mantener los árboles de análisis existentes, mezclar mezclas de fragmentos de cadena en los puntos de edición y analizar los árboles que representan las partes del texto de origen que no han cambiado, y reintegrar las cadenas en el conjunto de árboles de análisis sintáctico. Se hace usando un analizador GLR incremental.

No es fácil de implementar; Hice solo la parte de GLR y nunca llegué a la parte incremental. La parte de GLR valió la pena.

Hay muchos trabajos sobre análisis incremental. Este es uno de los realmente buenos.