react form domcontentloaded parsing events autocomplete event-handling tree

parsing - form - Autocompletar integración con analizador



json schema form (1)

¿Cómo se autocompone normalmente un analizador?

Si tomamos un ejemplo, donde paso lo siguiente a un analizador:

"int i=2"

entonces las opciones de autocompletar para esto pueden incluir:

"int i=2," "int i=2;"

¿La autocompleción debe ser parte del analizador?

De lo contrario, en el caso de un analizador basado en eventos, supongo que el analizador emitirá un evento que contiene identificadores para esas ramas en la máquina de estados del analizador, que son posibles. El módulo de autocompletar sabría qué imprimir para cada estado.

Para un analizador basado en árbol, el analizador tendrá que devolver una estructura de árbol que contenga de alguna manera las ramas que están disponibles.

¿Es así como está hecho? ¿Qué tipo de analizador es el mejor para procesar cadenas de comandos cuando la autocompletación es un requisito?


Puede leer el conjunto de anticipación (es decir, los tipos de token que son aceptables a continuación) de una gramática LR (k), pero tales gramáticas tienden a ser enormes. Las diversas formas de compresión de la gramática (de las cuales LALR (1) probablemente sea todavía la más común) hacen que el conjunto de búsqueda anticipada sea menos preciso (siempre incluirá tipos de token válidos, pero también podría contener elementos inválidos). Los tipos de tokens no válidos en el conjunto de anticipación también pueden introducirse mediante la compresión de tabla y mediante la inclusión deliberada de producciones de error (incluidas para mejorar los mensajes de error).

Leer el conjunto de anticipación de un analizador de descenso recursivo puede ser más complicado, en parte porque dichos analizadores suelen tener un código abierto en lugar de depender de las tablas de transición. Sin embargo, en teoría al menos, una gramática LL (k) también tiene la posibilidad de calcular un conjunto de anticipación, aunque también puede ser impreciso.

Sin embargo, el autocompletado más interesante no es la puntuación sino los símbolos. Una gramática no es suficiente para decirle qué nombres están dentro del alcance en un punto dado, aunque puede decirle qué tipos de nombres serían factibles. Tendría que enganchar en la tabla de símbolos para obtener información precisa de autocompletar. En los idiomas donde los identificadores pueden usarse antes de su declaración, esto podría ser incluso más complicado, aunque es probable que el analizador mantenga una lista de nombres no resueltos en alguna parte.

Otra dificultad con el uso de analizadores para generar información de autocompletado es que los analizadores tienden a optimizarse para programas sintácticamente correctos, y es posible que no funcionen en absoluto después de detectar un error de sintaxis. Para un usuario de IDE, esto puede ser realmente irritante; los errores de puntuación menores desactivan la función de autocompletar hasta que el error se rastrea y arregla. (Personalmente, encontré que esos sistemas son demasiado molestos para el código; prefiero concentrarme en lo que estoy escribiendo en este momento que en los paréntesis faltantes en otras partes del código).

IM (H) O, sería mejor usar algo que se pareciera vagamente al análisis sintáctico de paquetes para seleccionar lo suficiente del contexto en el punto de inserción para obtener una noción razonable de lo que podría seguir. Si tiene acceso para completar las declaraciones correctas de tipo de datos, úselos, pero siempre existe el inconveniente de poner algo en el texto que se parece a un símbolo en el conjunto de anticipación (aunque eso también puede ser irritante).

Buena suerte, de todos modos.