Mal consejo al trabajar con ANTLR

Su atención está invitada a un conjunto de consejos dañinos que lo ayudarán a crear el analizador más productivo. ¡No olvide hacer todo de acuerdo con las instrucciones, de lo contrario, algo saldrá mal!

1. ATN: no es un error, sino una característica


Terrence Par hizo una gran característica para optimizar la predicción de rama en su gramática. Exclusivamente por preocupación por el rendimiento de su analizador, el campo es estático y acumulará información indefinidamente. Por supuesto, no notará mucha diferencia en los archivos pequeños, ¡lo principal es no analizar archivos de 2-3 megabytes en sus pruebas, incluso si no hay suficiente memoria para otra persona!

2. ¡Mira hacia adelante para aquellos que no están acostumbrados a mirar hacia atrás a las explosiones!


Si su gramática verifica todos los tokens de la transmisión en cada regla, ¡entonces puede garantizar la precisión del procesamiento! Si no hay suficiente pila, entonces es suficiente para aumentar su tamaño diez veces, ¡lo principal es hacer más reglas!

3. SLL para débiles


¿Por qué hacer la optimización si ANTLR4 puede hacerlo por usted? La gramática en TODO el modo le ahorra un tiempo valioso al leer dichos artículos. Recuerde agregar los mismos tokens a cada alternativa, especialmente si se ve hermosa.

4. AST - toda la información que tienes


No te olvides de escuchar a Terrence y agregar visitante, soporte de escucha a tu analizador. Incrustar código en una gramática no solo es una dificultad innecesaria, sino también un problema potencial con la refactorización. Sin pasar por todos los nodos del árbol, no solo puedes probar suerte, ¡sino también comprobar los nervios del cliente!

5. ¡Más reglas, dios de las reglas!


¿Pero sabías que con la ayuda de ANTLR4 puedes construir una torre de Babel? En las secciones de código con un gran anidamiento no se puede encontrar? ¿Una función dentro de una función con una gran cantidad de expresiones? Simplemente no muestre al cliente el trabajo en archivos js minificados, de todos modos, nadie los entiende, incluso los navegadores.

6. El lexer solo es necesario para crear tokens.


¡Bajo ninguna circunstancia intente hacer algo con los tokens en el lexer, empaquetar el bloque {} en el token no le permitirá disfrutar viendo las máquinas del cliente que requieren más memoria!

¡La memoria debe fluir! ¡Que memleak te acompañe!

Source: https://habr.com/ru/post/undefined/


All Articles