plum

#treesitter#compiler#wasm

git clone https://git.pyrossh.dev/plum

A statically typed, imperative programming language inspired by rust, python


plum-tooling/tree-sitter-plum/test/corpus/if.txt
================================================================================
if
================================================================================

fun main() =
  if a < b
    printLn("a is less than b")
  else if a > 9
    printLn(a == 9)
  else if a > 18
    printLn(b == 0)
  else
    if a > 5
      printLn(a)
    else
      printLn("None")

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

(source
  (fn
    (fn_identifier)
    (body
      (if
        (expression
          (comparison_operator
            (primary_expression
              (var_identifier))
            (primary_expression
              (var_identifier))))
        (body
          (expression
            (primary_expression
              (fn_call
                (var_identifier)
                (fn_argument_list
                  (expression
                    (primary_expression
                      (string
                        (string_start)
                        (string_content)
                        (string_end)))))))))
        (else_if
          (expression
            (comparison_operator
              (primary_expression
                (var_identifier))
              (primary_expression
                (integer))))
          (body
            (expression
              (primary_expression
                (fn_call
                  (var_identifier)
                  (fn_argument_list
                    (expression
                      (comparison_operator
                        (primary_expression
                          (var_identifier))
                        (primary_expression
                          (integer))))))))))
        (else_if
          (expression
            (comparison_operator
              (primary_expression
                (var_identifier))
              (primary_expression
                (integer))))
          (body
            (expression
              (primary_expression
                (fn_call
                  (var_identifier)
                  (fn_argument_list
                    (expression
                      (comparison_operator
                        (primary_expression
                          (var_identifier))
                        (primary_expression
                          (integer))))))))))
        (else
          (body
            (if
              (expression
                (comparison_operator
                  (primary_expression
                    (var_identifier))
                  (primary_expression
                    (integer))))
              (body
                (expression
                  (primary_expression
                    (fn_call
                      (var_identifier)
                      (fn_argument_list
                        (expression
                          (primary_expression
                            (var_identifier))))))))
              (else
                (body
                  (expression
                    (primary_expression
                      (fn_call
                        (var_identifier)
                        (fn_argument_list
                          (expression
                            (primary_expression
                              (string
                                (string_start)
                                (string_content)
                                (string_end)))))))))))))))))