【问题标题】: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 教导说编译器在解析后所做的是“静态语义分析”,而将“动态”语义留在执行程序时发生的事情。

标签: semantics static-analysis


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-10-28
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多