静态分析和语义分析有啥区别?

Posted

技术标签:

【中文标题】静态分析和语义分析有啥区别?【英文标题】:What is the difference between static analysis and semantic analysis?静态分析和语义分析有什么区别? 【发布时间】:2013-12-28 05:04:54 【问题描述】:

查看 ISO 26262-6 (2011) Road Vehicle Functional Safety Part 6 Product Development 中的表 9,静态代码分析 (1g) 和语义代码分析 (1h) 分别作为验证方法列出。

我搜索了差异的解释,但没有找到任何令人满意的东西。

说静态分析可以使用语义分析,但不一定反之亦然?

一般来说,静态分析和语义分析有什么区别?

我见过的大多数静态分析描述似乎都涉及语义分析的讨论。 What is static code analysis?

感谢您的宝贵时间以及任何可能的见解和反馈。

【问题讨论】:

IMO 术语不佳,除非他们在其他地方定义了它。看一看。更复杂的是,Frank de Remer 教导说编译器在解析后所做的是“静态语义分析”,而将“动态”语义留在执行程序时发生的事情。 【参考方案1】:

静态分析意味着分析只针对源代码运行,不需要运行代码或提供测试输入。此类别中的另一种类型是动态分析,它实际上运行代码来测试给定的输入。

语义分析表明分析估计(或计算)源代码的含义。此类别中的另一种是句法分析,它只检查源代码的形状。

在大多数情况下,只是说语义或句法分析意味着它也是静态分析。

例如,假设 C 编译器发出两个错误“缺少分号”和“未使用变量”,前者是(静态)句法分析的结果,后者是编译器执行的(静态)语义分析的结果.

【讨论】:

【参考方案2】:

如果您更仔细地查看表 9,您会看到: 1小时 |语义代码分析^d

您可以在表格下方阅读“^d”的含义: 方法 1h 用于通过使用变量可能值的抽象表示来对源代码进行数学分析...

有提供此类分析的软件工具,例如 f.e.多空间证明者。

【讨论】:

【参考方案3】:

大多数编译器在编译时进行语义分析,其目的是检查您的代码是否满足编程语言规范。它通常检查类型正确性、方法是否存在等。

静态分析是一个比较复杂的过程,不需要运行程序就能找到一些警告、错误等。它比语义分析更深入,并产生更详细的结果。

例如,有许多静态分析工具,如 PVS-Studio、Intellij Idea 检查等。

有时,它们会产生很多噪音,但可以避免一些错误。

【讨论】:

以上是关于静态分析和语义分析有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

潜在语义分析的介绍

NLP第十篇-语义分析

第十章-语义分析之类型检查

潜在语义分析(LSA)

语义分析的语言?

语法分析和语义分析