短路布尔运算符的代码生成

问题描述 投票:0回答:1

boolean expression的例子是什么,如果发生短路,结果会有所不同与完全评估布尔表达式相比,使用评估。然后我想知道如何根据三个地址布尔表达式的短路评估的中间代码?

compiler-construction code-generation boolean-expression
1个回答
1
投票

短路布尔值的最常见用法是确保不执行未定义的计算。换句话说,表达式的值并没有因为短路而有所不同,而是表达式的值定义得很好。

例如,考虑一个常见的C习惯用法:

if ( ptr != NULL && *ptr == some_value ) { /* Do something */ }

在这种情况下,短路&&确保指针恰好是NULL时不会取消引用指针。经过全面评估,如果第一个条件为假,则该计算可能会做某些确实不希望的事情(例如segfault)。

由于短路评估的目的是要有条件地不对表达式的一部分进行评估,因此TAC实现需要在评估左侧表达式后包括条件分支语句。换句话说,以上语句将以与等效语句非常相似的方式进行编译:

if ( ptr != NULL ) {
  if ( *ptr == some_value ) {
    /* Do something */
  }
}

大概可以通过两个条件跳转来实现。

我不确定这与语义分析或类型检查有什么关系。

© www.soinside.com 2019 - 2024. All rights reserved.