解析具有语法错误的代码

Jac*_*esB 10 language-agnostic parsing

解析技术在CS文献中有很好的描述.但我知道的算法要求源语法正确.如果遇到语法错误,则立即中止解析.

但IDE(如Visual Studio)通常能够在键入时提供有意义的代码完成和其他提示,这意味着语法通常不处于有效状态.例如,在函数调用中键入左括号,IDE为函数提供参数提示,即使在键入右括号之前语法无效.

在我看来,这必须依赖于某种猜测或容错的解析器.任何人都知道使用什么技术或算法?

SK-*_*gic 1

Packrat 很有前途 - 它提供了关键点上成功和失败的解析尝试的信息,这些信息可以恢复并用于智能错误报告、完成、提示等。例如,如果光标位于缓存中所有解析尝试都被标记为失败的点,则可以给出尝试的标记列表作为完成选项。