我想为特定语言编写一个小编辑器。在编辑器中,我们可以添加indent
一行或多行(即在每行左侧添加空格);我们还将能够format
修改整个代码(即,在适当的位置更改空格和换行符)。
ocamllex
给定一个程序,我的前端ocamlyacc
可以构建一个Abstract Syntax Tree (AST)
. 我想知道在 AST 中存储元素位置的常用方法。
position
我猜的一种方法是在 AST 的每个元素上附加一个(开始) 。例如,如果表达式的类型定义如下:
type expression =
...
| E_int of int
| E_function_EEs of Function.t * (expression list)
它会变成:
type expression =
...
| E_int of position * int
| E_function_EEs of position * Function.t * (expression list)
然后,如果我们知道每个元素的长度,我们就可以推断出所有内容在编辑器中的位置。这是一种常见的方法吗?我不觉得好看...