这些工具中有许多确实可以直接与抽象语法树配合使用(或者直接对它进行一对一可视化)。其中包括您已经看到的Blockly,以及其他类似的基于块的语言和编辑器(Scratch,Pencil Code / Droplet,Snap!,GP,Tiled Grace等)。
出于其他原因(空间以及交互困难)的原因,这些系统没有显示传统的顶点和边缘图表示,而是直接表示树。如果一个节点或块直接位于父节点内部,则它是另一个节点的子节点。
我构建了这些系统之一(Tiled Grace,paper,paper)。我可以向您保证,它非常直接地与AST一起使用:您在屏幕上看到的是语法树的精确表示,如嵌套的DOM元素(所以就是一棵树!)。
这是某些代码的AST。根是“ for ... do”的方法调用节点。该节点有一些子节点,以“ _.._”开头,该子节点本身有两个子节点,即“ 1”节点和“ 10”节点。屏幕上显示的正是编译器后端在处理过程中吐出的内容-从根本上讲就是系统的工作方式。
如果愿意,可以将其视为标准的树形布局,其边缘朝着您的方向指向屏幕外(并被它们前面的块所遮挡),但是嵌套是将树显示为顶点的有效方法图。
它还将“从源到节点图进行往返,然后在需要时再次返回源”。实际上,单击底部的“代码视图”可以看到这种情况。如果修改了文本,则将重新解析该文本,并渲染结果树以供您再次编辑,如果修改了块,则源代码也会发生相同的情况。
到目前为止,Pencil Code所做的事情基本上是相同的,但界面更好。它使用的块是CoffeeScript AST的图形视图。总体上,其他基于块或图块的系统也是如此,尽管其中一些系统在视觉表示中并未使嵌套方面变得十分清晰,而且许多系统背后没有实际的文字语言,因此“语法树”可能有点虚幻,但是原理就在那里。
你错过了什么,然后,是这些系统确实是直接与抽象语法树工作。您所看到和操作的是树的空间高效渲染,在许多情况下,实际上是编译器或解析器生成的AST。