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

Parsing 如何同步AST元素和光标位置?,parsing,abstract-syntax-tree,Parsing,Abstract Syntax Tree,我正在使用解析器检索编辑器中键入的某些代码的AST。我现在想要实现的是:给定编辑器中的光标位置(行、列),查找当前选定的AST元素。但是,我不知道如何做到这一点,有没有标准的方法来解决这个问题?首先,在每个AST节点上标记源文件位置(行号和列号) 其次,在编辑器中构建一个映射:抽象地,对于每个像素,显示的源文件的行号和列号。(实际上,如果显示的行是固定高度的,并且显示的字符是固定的,则可以使用从显示的行号到源行号的地图) 现在,从屏幕位置(例如光标位置)来回映射到AST节点很容易,即使您编辑树和

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

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

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

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


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

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

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

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


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

创建AST后,如何在每个AST节点上标记源文件位置?您可能无法。为什么不能在创建节点时标记它们?我本来想使用解析器,但看起来确实需要修改它。在创建AST之后,如何在每个AST节点上标记源文件位置?您可能不能。为什么不能在创建节点时标记它们呢?我本来想使用解析器,但看起来我确实需要修改它。