object {
  block_map "equality" {
    labels = ["operator"]

    object {
      attr "exactly" { type = any }
      attr "not" { type = any }
      attr "type_mismatch_number" { type = any }
      attr "type_mismatch_bool" { type = any }
    }
  }
  block_map "inequality" {
    labels = ["operator"]

    object {
      attr "lt" { type = any }
      attr "gt" { type = any }
      attr "eq" { type = any }
    }
  }
  block "arithmetic" {
    object {
      attr "add" { type = any }
      attr "add_big" { type = any }
      attr "sub" { type = any }
      attr "sub_neg" { type = any }
      attr "mul" { type = any }
      attr "div" { type = any }
      attr "mod" { type = any }
      attr "mod_frac" { type = any }
    }
  }
  block_map "logical_binary" {
    labels = ["operator"]

    object {
      attr "tt" { type = any }
      attr "ft" { type = any }
      attr "tf" { type = any }
      attr "ff" { type = any }
    }
  }
  block_map "logical_unary" {
    labels = ["operator"]

    object {
      attr "t"   { type = any }
      attr "f"   { type = any }
    }
  }
  block "conditional" {
    object {
      attr "t"   { type = any }
      attr "f"   { type = any }
    }
  }
}