================================================================================
Simple If
================================================================================

if true { "True" }

--------------------------------------------------------------------------------

(root
  (statement
    (statement_kind
      (if_else
        (if
          (expression
            (value
              (boolean)))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))))))

================================================================================
Complex If
================================================================================

if 1 == 1 && 2 == 2 && 3 == 3 { "True" } 

--------------------------------------------------------------------------------

(root
  (statement
    (statement_kind
      (if_else
        (if
          (expression
            (logic
              (expression
                (logic
                  (expression
                    (logic
                      (expression
                        (logic
                          (expression
                            (logic
                              (expression
                                (value
                                  (integer)))
                              (logic_operator)
                              (expression
                                (value
                                  (integer)))))
                          (logic_operator)
                          (expression
                            (value
                              (integer)))))
                      (logic_operator)
                      (expression
                        (value
                          (integer)))))
                  (logic_operator)
                  (expression
                    (value
                      (integer)))))
              (logic_operator)
              (expression
                (value
                  (integer)))))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))))))

================================================================================
Nested If
================================================================================

if true {
  if 42 == 12 {
    'hiya'
  } else { 
    'bye'
  }
}

--------------------------------------------------------------------------------

(root
  (statement
    (statement_kind
      (if_else
        (if
          (expression
            (value
              (boolean)))
          (block
            (statement
              (statement_kind
                (if_else
                  (if
                    (expression
                      (logic
                        (expression
                          (value
                            (integer)))
                        (logic_operator)
                        (expression
                          (value
                            (integer)))))
                    (block
                      (statement
                        (statement_kind
                          (expression
                            (value
                              (string)))))))
                  (else
                    (block
                      (statement
                        (statement_kind
                          (expression
                            (value
                              (string))))))))))))))))

================================================================================
If Else
================================================================================

if false { "True" } else { "False" }

--------------------------------------------------------------------------------

(root
  (statement
    (statement_kind
      (if_else
        (if
          (expression
            (value
              (boolean)))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))
        (else
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))))))

================================================================================
If Else If
================================================================================

if 1 == 1 {
  "math is fun"
} else if 4 == 9 {
  "math is broken"
}

--------------------------------------------------------------------------------

(root
  (statement
    (statement_kind
      (if_else
        (if
          (expression
            (logic
              (expression
                (value
                  (integer)))
              (logic_operator)
              (expression
                (value
                  (integer)))))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))
        (else_if
          (expression
            (logic
              (expression
                (value
                  (integer)))
              (logic_operator)
              (expression
                (value
                  (integer)))))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))))))

================================================================================
If Else Else If Else
================================================================================

if false {
  "no"
} else if false {
  "no"
} else if 1 + 1 == 9 {
  "not the answer"
} else {
  "42"
}

--------------------------------------------------------------------------------

(root
  (statement
    (statement_kind
      (if_else
        (if
          (expression
            (value
              (boolean)))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))
        (else_if
          (expression
            (value
              (boolean)))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))
        (else_if
          (expression
            (logic
              (expression
                (math
                  (expression
                    (value
                      (integer)))
                  (math_operator)
                  (expression
                    (value
                      (integer)))))
              (logic_operator)
              (expression
                (value
                  (integer)))))
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))
        (else
          (block
            (statement
              (statement_kind
                (expression
                  (value
                    (string)))))))))))
