问题标签 [static-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - 语义分析的语言?
背景: - 有用于表达编程语言有效词典和语法的正式语言 - 这种表示(例如正则表达式和上下文无关语法)可以使用某些工具(例如 LEX 和 YACC)自动编译到某些编程语言的词典/语法分析器中
问题: - 是否有用于定义编程语言语义的正式语言?- 是否有编译器可以根据这些形式语言自动生成语义分析器的代码?- 任何有关源代码语义分析的资源可供阅读?
笔记:-您可能会发现我的问题不切实际,没关系……我是编译器的新手?- 通过语义分析,我的意思是从源代码中收集必要的信息,用于下一步的代码优化和生成……这应该包括类型/边界检查……等等
我希望我提前说清楚了非常感谢
perl - 如何在 Perl 中找到复制/粘贴(复制、克隆)代码?
我已经在 Internet 上搜索了一段时间,但找不到任何可以分析一组 Perl 文件(模块或脚本)并标记重复或克隆或复制的免费(或廉价)工具/实用程序/模块/粘贴代码。
我现在好多了,但我过去常常在各处复制和粘贴代码段。我想清理它并修复我的旧代码重复,但我将不胜感激一些工具帮助,这样我就不必用细齿梳子浏览所有旧代码。另外,人工识别这种攻击很容易出错。
compiler-construction - 自动编译器检测循环中将相同对象实例添加到容器中
这是一个愚蠢的错误:
当然,我应该在循环内实例化一个新的 Foo 。
编译器可以在编译时检测到这种错误吗?
对于天真的眼睛,它看起来应该能够检测到这种行为(在循环中用相同对象的实例填充 List)。然后它应该发出一个警告,比如“你用同一个实例多次填充一个容器。”。
那么,我有多天真呢?你知道存在这样的语言吗?
c - C 中的暂定定义和链接
考虑由两个文件组成的 C 程序,
f1.c:
f2.c:
我对 C99 标准第 6.9.2 段的解读是,这个程序应该被拒绝。在我对 6.9.2 的解释中,变量x
在 中暂定定义f1.c
,但这个暂定定义在翻译单元的末尾变成了实际定义,因此(在我看来)应该表现得好像f1.c
包含定义一样int x=0;
。
对于我能够尝试的所有编译器(以及重要的链接器),这不是发生的事情。我尝试的所有编译平台都链接上述两个文件,两个文件中的值x
都是2。
我怀疑这是偶然发生的,或者只是作为标准要求之外提供的“简单”功能。如果您考虑一下,这意味着链接器对那些没有初始化程序的全局变量有特殊支持,而不是那些显式初始化为零的变量。有人告诉我,无论如何编译 Fortran 都可能需要链接器功能。这将是一个合理的解释。
对此有什么想法吗?标准的其他解释?哪些平台的文件名f1.c
和f2.c
拒绝链接在一起?
注意:这很重要,因为问题发生在静态分析的上下文中。如果这两个文件可能拒绝在某个平台上链接,分析器应该抱怨,但如果每个编译平台都接受它,那么没有理由警告它。
java - Findbugs + JSR305:指定默认行为的可能性?
注意:我所说的那些注释是由 JSR305 指定的。
我有最新的 Findbugs (1.3.9), 当某些用 @Nonnull 注释的字段被分配为 null 时,它会正确发现错误。
但是,在我的项目中,“非空逻辑”是默认情况。我会说 null 仅在 5% 的情况下被明确允许。
因此,用@Nonnull 注释 95% 的字段会非常不方便。我宁愿用 @Nullable 注释这 5% 的字段。
我试图用@Nonnull 注释整个包,它不会改变任何东西。
那么,以某种方式可以指定默认逻辑吗?
regex - 是否有提供正则表达式静态分析的库?
具体来说,是否有一个库,当给定 2 个(或更多)正则表达式时,可以判断是否存在两者都匹配的输入?如果可以通过 Java 或 .NET 轻松访问它,则可以加分,但命令行也可以。
提问者的日志,补充:
将提供给该算法的正则表达式相当简单。虽然我相信有几个具有前瞻功能,但它们都是具有固定最小和最大长度的文字或字符类的相当简单的组合。
vba - 在 VB6/VBA 中是否真的需要对象清除/数组释放(优点/缺点?)
我从使用静态代码分析(特别是 Aivosto 的项目分析器)中学到了很多关于 VB 的知识。它检查的一件事是您是否清除了所有对象和数组。我以前只是盲目地这样做,因为 PA 是这么说的。但是现在我对 VB 释放资源的方式有了更多的了解,在我看来这些事情应该是自动发生的。这是 VB6 之前的遗留功能,还是有理由将对象显式设置为空并在数组上使用 Erase?
database-design - 是否有有用的数据库静态分析工具?
是否有一种工具可以检查数据库的配置和架构是否存在可疑字段、关系和配置,类似于lint 等静态分析工具如何标记可疑代码行?
我不一定要求标准化,但肯定有一些愚蠢的东西可以在不解决 Hard AI 或 Halting Problem 的情况下被检测到。
java - PMD - 检查过多的公共方法(但不包括构造函数和 getter/setter)
我希望添加一个 PMD 检查以确保一个类没有太多公共方法,但我不希望将构造函数和 getter/setter 包含在检查中。
ExcessivePublicCount 检查包括构造函数、getter/setter 和公共变量,我看不到自定义它的方法。
TooManyMethods 检查不包括 getter/setter,但包括其他所有内容(包括私有方法)。检查的 XPath 代码如下。
任何人都可以帮助我修改它以实现我想要的,或者建议另一种方法来使用 PMD 做到这一点?
c - 为了清楚起见,是否应该在返回类型上使用无用的类型限定符?
当我们在头文件中有原型时,我们的静态分析工具会抱怨“返回类型上无用的类型限定符”,例如:
我们这样定义它是因为函数返回一个永远不会改变的常量,认为 API 看起来更清晰const
。
为了清楚起见,我觉得这类似于将全局变量显式初始化为零,即使 C 标准已经声明如果未显式初始化,所有全局变量都将初始化为零。归根结底,这真的无关紧要。(但静态分析工具并没有抱怨这一点。)
我的问题是,这有什么原因会导致问题吗?我们应该忽略工具产生的错误,还是应该以不太清晰和一致的 API 为代价来安抚工具?(它返回const char*
工具没有问题的其他常量。)