static-analysis - IDE 错误检测和自动完成的复杂性取决于语言语法?

标签 static-analysis pre-compilation

对于主要由人类可读的短语和单词(即 Python、VB.NET)组成的编程语言,是否需要更少的检查/不太严格的代码分析来提供开发环境错误反馈和自动完成?这与 C 风格语言形成鲜明对比,C 风格语言更多地依赖于符号和标点符号来构建代码结构。

最佳答案

我有经验/负责搭建dozens of language front ends .

冗长的语言与标点符号的语言通常同样难以解析和静态分析。

定义这两种语言的人们要么几十年来一直在装饰它们(例如,自 1958 年以来的 COBOL),要么构建具有复杂语法、复杂名称解析和类型推断规则的复杂语言(C++、Scala、Ruby);然后,编译器供应商继续添加晦涩的语法来支持他们所做的奇怪的事情或提供客户锁(例如,MS“托管 C++”、DLL 声明等)。第三个问题是糟糕的定义;顶级语言可能对它们的工作方式有精确的规则,但许多语言的定义很草率(例如 PHP),这会产生黑暗的角落情况,必须通过实际实现的痛苦实验来解决。

C++ 是我们最糟糕的,尤其是。 C++11 委员会最近搞得一团糟。我们拥有完整的 C++ 解析器,但仍在 C++98 实现之上致力于 C++11 的全名解析。 (名称解析代码大约有 250,000 行代码,这还不够!)。

IBM COBOL 紧随其后;该语言非常庞大,并且存在各种有趣的名称解析规则(“如果引用明确,则非限定名称可以在没有限定的情况下引用特定名称”那么,这个名称在这种情况下是明确的引用吗?)。

一旦你完成了解析和名称/类型解析,那么你就进入了控制流、数据流、指向分析、范围分析、调用图构建……这些工作量通常与早期阶段;通过拥有支持这些任务的非常好的库,我们可以少做一些事情。

将所有这些作为背景分析,您可以开始进行人们想要的智能类型的“静态分析”。

另一张海报指出,从语法错误中恢复并(强调)“继续生成有意义的错误消息”。对此我只能说“阿门,兄弟”。请参阅此答案 https://stackoverflow.com/a/6657974/120163讨论当您有“部分程序”时会出现什么问题,这本质上就是您在修复语法错误时猜测修复时得到的结果。

关于static-analysis - IDE 错误检测和自动完成的复杂性取决于语言语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702652/

相关文章:

java - 查找被调用的方法 - 反向调用层次结构

php - Ruby、PHP 或 Perl 可以为 Python 等代码创建预编译文件吗?

c - 如何让 GCC 在编译时评估函数?

asp.net - 为什么 aspnet_compiler.exe 这么慢(并且可以做得更快)?

.net - 列出方法可能抛出的所有异常

c# - 如何避免 'Method is never used' 消息?

ruby-on-rails-4 - sprockets - 预编译独立 Assets

c++ - 用于检测 C++ 中 ABI 中断的静态分析工具

arm - 用 LLVM 解释 ARM/MachO 进行分析和优化?