是否需要更少的检查/不太严格的代码分析来为主要由人类可读的短语和单词(即Python,VB.NET(组成的编程语言提供开发环境错误反馈和自动完成? 这与 C 风格的语言形成鲜明对比,C 风格的语言更多地依赖于代码结构的符号和标点符号。
我有经验/负责构建数十种语言前端。
冗长的语言与 标点符号语言通常同样难以解析和静态分析。
定义这两种语言的人要么已经装饰了几十年(例如,自 1958 年以来的 COBOL(,要么构建具有复杂语法和复杂名称解析和类型推断规则的复杂语言(C++、Scala、Ruby(;然后编译器供应商继续添加晦涩的语法来支持他们所做的奇怪事情或提供客户锁(例如, MS"托管C++",DLL 声明等(。 还有第三个问题,即糟糕的定义;顶级语言可能对它们的工作方式有精确的规则,但许多语言都有草率的定义(例如,PHP(,这会产生黑暗的角落情况,必须通过对实际实现的痛苦实验来解决。
C++是我们最糟糕的,尤其是C++11委员会最近把事情搞得一团糟。 我们有完整的C++解析器,但在 C++98 实现之上,仍在为 C++11 进行全名解析。 (名称解析代码大约有 250,000 行代码,这还不够!
IBM COBOL紧随其后;该语言是巨大的,并且有各种有趣的名称解析规则("如果引用是明确的,则非限定名称可以无限定地引用特定名称"那么,在这种情况下,这个名称是明确的引用吗?(。
一旦你通过了解析和名称/类型解析,那么你就会进入控制流、数据流、点分析、范围分析、调用图构造......通常与早期阶段的工作量大致相同;通过拥有支持这些任务的非常好的库,我们可以少花钱。
有了所有这些作为背景分析,你就可以开始做人们想要的智能类型的"静态分析"。
另一张海报指出,从语法错误中恢复和(强调("继续生成有意义的错误消息"。 对此,我只能说"阿门,兄弟"。请参阅此SO答案 https://stackoverflow.com/a/6657974/120163,以讨论当您拥有"部分程序"时会出现什么问题,这基本上是语法错误修复猜测修复时得到的结果。