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