【问题标题】:Code generation for short-circuit Boolean operators短路布尔运算符的代码生成
【发布时间】:2020-04-02 23:47:58
【问题描述】:

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

【问题讨论】:

  • 您的实际问题与语义分析或类型检查无关。

标签: compiler-construction code-generation boolean-expression


【解决方案1】:

短路布尔值最常见的用途是确保不执行未定义的计算。换句话说,与短路相比,表达式的值的不同并不是因为表达式的值是明确定义的。

例如,考虑一个常见的 C 习语:

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

在这种情况下,短路&& 可确保指针恰好是NULL 时不会被取消引用。通过全面评估,如果第一个条件为假,计算可能会做一些非常不受欢迎的事情(如段错误)。

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

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

这可能会通过两个条件跳转来实现。

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

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2011-08-04
    • 2014-05-31
    • 2011-12-26
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2012-10-30
    • 2012-09-19
    相关资源
    最近更新 更多