我正在为一个文本编辑器编写自动括号完成功能,我当前的方法是在每一个换行符上调用一个括号匹配过程(假设它是正确和有效的),其中最后一个键入的符号是左括号,从新行开始(最后一个键入的左括号在堆栈顶部),直到任意一个堆栈为空或者它到达源的末尾,但找不到匹配的右括号。
但是,对于大的源文件(>1MB),这种方法似乎很慢,特别是在源行的前半部分添加换行符时(换行符在第一行=最坏情况=扫描整个文本)一些ide具有这种能力,并且能够快速地处理它,因此它们必须使用不同的方法所以,我想知道他们使用的是什么算法或者其他比我更好的方法。
最佳答案
如果匹配方括号是一个重要的问题,则可以仅使用方括号的辅助数据结构来处理它。
例如,您可以构建一个树,该树存储节点中一对括号的开始位置/结束位置,以及节点中所有括号对的子级位置。特别注意不匹配的括号(即,它们在父边界处开始/结束)。
添加一个额外的开/闭括号对于这样一个结构来说非常方便,因为您可以跳过所有子树和兄弟树。
适当的实现应该使用o(log(n))解决方案执行,n是括号对的数目。
关于algorithm - 高效的自动括号补全算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6083209/