He encontrado varias herramientas de programación visual de código abierto como Blockly y sus amigos, y otros proyectos alojados en Github, pero no pude encontrar ninguno que funcione directamente con el árbol de sintaxis abstracta.
¿Porqué es eso?
Lo pregunto porque una vez que descubrí que cada compilador tiene una fase en el proceso de compilación donde analiza el código fuente a un AST, era obvio para mí que algunas herramientas de programación visual podrían aprovechar esto para darle al programador formas para editar el AST directamente de forma visual, y también para realizar el viaje de ida y vuelta desde la fuente al gráfico de nodos y luego volver a la fuente cuando sea necesario.
Por ejemplo, uno podría pensar que desde el JavaScript AST Visualizer hasta una herramienta de programación visual JavaSript real no hay mucha diferencia.
Entonces, ¿qué me estoy perdiendo?
Respuestas:
Muchas de estas herramientas hacen el trabajo directamente con el árbol de sintaxis abstracta (o más bien, una visualización directa de uno a uno de la misma). Eso incluye Blockly, lo que has visto, y las otras lenguas y editores basados en bloques como él ( arañazos , lápiz Código / la gotita , Snap! , GP , baldosa Gracia , y así sucesivamente).
Esos sistemas no muestran una representación gráfica tradicional de vértices y bordes, por razones explicadas en otra parte (espacio, y también dificultad de interacción), pero están representando directamente un árbol. Un nodo o bloque es hijo de otro si está directamente, físicamente dentro del padre.
Construí uno de estos sistemas ( Tiled Grace , papel , papel ). Les puedo asegurar que está trabajando directamente con el AST: lo que ven en la pantalla es una representación exacta del árbol de sintaxis, como elementos DOM anidados (¡un árbol!).
Este es el AST de algún código. La raíz es un método llamado nodo "for ... do". Ese nodo tiene algunos hijos, comenzando con "_ .. _", que tiene dos hijos, un nodo "1" y un nodo "10". Lo que aparece en la pantalla es exactamente lo que el backend del compilador escupe en el medio del proceso: así es fundamentalmente cómo funciona el sistema.
Si lo desea, puede considerarlo como un diseño de árbol estándar con los bordes apuntando fuera de la pantalla hacia usted (y ocluido por el bloque frente a ellos), pero anidar es una forma tan válida de mostrar un árbol como un vértice diagrama.
También "realizará el viaje de ida y vuelta desde la fuente al gráfico de nodos y luego volverá a la fuente cuando sea necesario". De hecho, puede ver que eso sucede cuando hace clic en "Vista de código" en la parte inferior. Si modifica el texto, se volverá a analizar y se generará el árbol resultante para que pueda volver a editar, y si modifica los bloques, sucede lo mismo con la fuente.
Pencil Code hace esencialmente lo mismo con, en este punto, una mejor interfaz . Los bloques que utiliza son una vista gráfica de CoffeeScript AST. También lo hacen los otros sistemas basados en bloques o mosaicos, en general, aunque algunos de ellos no hacen que el aspecto de anidación sea tan claro en la representación visual, y muchos no tienen un lenguaje textual real detrás de ellos, por lo que el " árbol de sintaxis "puede ser un poco ilusorio, pero el principio está ahí.
Lo que te falta, entonces, es que estos sistemas realmente están trabajando directamente con el árbol de sintaxis abstracta. Lo que ves y manipulas es una representación de un árbol que ahorra espacio, en muchos casos literalmente el AST que produce un compilador o analizador.
fuente
Al menos dos razones:
Porque el código fuente es una representación mucho más concisa. Diseñar un AST como un gráfico ocuparía mucho más espacio visual.
Los programadores valoran tener el mayor contexto posible, es decir, tener tanto código presente de una vez en la pantalla al mismo tiempo. El contexto les ayuda a gestionar mejor la complejidad. (Esa es una razón por la cual muchos programadores usan estas fuentes pequeñas y locas y enormes pantallas de 30 ").
Si tratamos de mostrar el AST como un gráfico o árbol, entonces la cantidad de código que podría caber en una sola pantalla sería mucho menor que cuando se representa como código fuente. Esa es una gran pérdida para la productividad del desarrollador.
Los AST están destinados a la programación del compilador, no para una fácil comprensión por parte de los programadores. Si tomó una representación AST existente y la visualizó visualmente, probablemente sería más difícil de entender para los desarrolladores, porque los AST no fueron diseñados para que los desarrolladores puedan aprenderlos fácilmente.
Por el contrario, el código fuente generalmente está diseñado para que los desarrolladores puedan leerlo / entenderlo; normalmente es un criterio de diseño crítico para el código fuente, pero no para los AST. Los AST solo deben ser entendidos por los escritores del compilador, no por los desarrolladores cotidianos.
Y, en cualquier caso, el lenguaje AST sería un segundo idioma que los desarrolladores tienen que aprender, además del idioma fuente. No es una victoria
Consulte también /software//q/119463/34181 para conocer otros posibles motivos.
fuente
El AST típico de los compiladores es bastante complejo y detallado. La representación gráfica dirigida rápidamente se volvería bastante difícil de seguir. Pero hay dos grandes áreas de CS donde se usan AST.
fuente