gpt4 book ai didi

parsing - 解析理论和实时语法高亮

转载 作者:行者123 更新时间:2023-12-03 20:46:27 26 4
gpt4 key购买 nike

我试图了解在处理非常大的字符串时应该如何实现实时语法高亮显示。我很困惑。这是我所知道的:

(假设我有函数 parsedString parseString(rawString) )

  • 调用 parseString(entireText)并在每次文本更改时用返回的解析(和样式等)字符串替换当前字符串。在处理大数据时,这似乎是一种糟糕的方法。
  • 有人建议分析编辑范围,将当前原始编辑字符串替换为解析后的字符串parseString(editedRange) .

  • 方法(1)已经够清楚了。我无法理解的是(2)。键入时,对于添加到字符串中的每个字符,都会触发通知,并解析单个字符(并按原样返回)。

    例如,如果我在解析 .css 文件时想要红色选择器,我如何理解何时有一个完整的选择器,然后是 {那应该是彩色的?我想有一些方法可以将解析延迟到匹配为止。你如何实现这一点?

    我不是在寻找有效的应用程序。一个好的解释也会很有用。

    先感谢您。

    最佳答案

    要重新解析增量更改,您需要为解析器提供一个较低级别的 API。

    解析器的状态随着它处理输入而改变。例如,首先解析器可能会跳过空格,现在它可能正在读取一个数字,然后它可能会为表达式构建抽象语法树。如果您可以对输入中里程碑点的所有解析器状态信息进行快照,那么您可以通过从更改前的最后一个里程碑开始重新解析增量更改(如果状态在超过该里程碑的里程碑处相同,则可能会提前停止)改变)。

    对于简单的语法突出显示,就像许多程序员编辑器所做的那样,这就是方法。语法高亮只需要标记化,所以没有太多状态需要捕获。许多编程语言都有很多里程碑的机会,例如,在新行的开头。在这些情况下,您甚至可能不需要实际保存解析器状态,因为您可能知道它在一行的开头总是相同的。

    所以你需要一个像这样的 API:

    parsedString parseIncrementally(parserState, rawString);

    关于parsing - 解析理论和实时语法高亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088106/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com