如何同步AST元素和光标位置



我正在使用一个解析器来检索编辑器中键入的某些代码的AST。我现在想要实现的是:给定编辑器中的光标位置(行、列),找到当前选择的AST元素。然而,我不知道如何做到这一点,有什么标准的方法来解决这个问题吗?

首先用源文件位置(行号和列号)标记每个AST节点。

其次,在编辑器中构建一个映射:抽象地,对于每个像素,显示源文件的行号和列号。(在实践中,如果显示的行是固定高度的,并且显示的字符是固定的,则可以使用从显示的行号到源行号的地图)。

现在,从屏幕位置(例如,光标位置)到AST节点的来回映射很容易,即使您编辑了树和/或更改了显示的部分。

在树中插入新的树节点时会出现一些复杂情况,因为它们没有"文件位置"。没关系,您可以为它们指定任意的行号/列号,这些行号与任何现有行号都不重叠。当您将修改后的树写入文件时,您实际上不再需要行号/列号,所以您可以忽略它们。

最新更新