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
2634d00 1
================================================================================
f997bee 2
if
2634d00 3
================================================================================
2634d00 4
c06ddba 5
fun main() =
f997bee 6
  if a < b
f997bee 7
    printLn("a is less than b")
f997bee 8
  else if a > 9
2634d00 9
    printLn(a == 9)
f997bee 10
  else if a > 18
2634d00 11
    printLn(b == 0)
f997bee 12
  else
f997bee 13
    if a > 5
f997bee 14
      printLn(a)
f997bee 15
    else
f997bee 16
      printLn("None")
2634d00 17
2634d00 18
--------------------------------------------------------------------------------
2634d00 19
2634d00 20
(source
2634d00 21
  (fn
9e7927c 22
    (fn_identifier)
2634d00 23
    (body
f997bee 24
      (if
2634d00 25
        (expression
2634d00 26
          (comparison_operator
2634d00 27
            (primary_expression
9e7927c 28
              (var_identifier))
2634d00 29
            (primary_expression
9e7927c 30
              (var_identifier))))
f997bee 31
        (body
aeaba6f 32
          (expression
aeaba6f 33
            (primary_expression
aeaba6f 34
              (fn_call
aeaba6f 35
                (var_identifier)
aeaba6f 36
                (fn_argument_list
aeaba6f 37
                  (expression
aeaba6f 38
                    (primary_expression
aeaba6f 39
                      (string
aeaba6f 40
                        (string_start)
aeaba6f 41
                        (string_content)
aeaba6f 42
                        (string_end)))))))))
f997bee 43
        (else_if
f997bee 44
          (expression
f997bee 45
            (comparison_operator
f997bee 46
              (primary_expression
9e7927c 47
                (var_identifier))
f997bee 48
              (primary_expression
f997bee 49
                (integer))))
f997bee 50
          (body
aeaba6f 51
            (expression
aeaba6f 52
              (primary_expression
aeaba6f 53
                (fn_call
aeaba6f 54
                  (var_identifier)
aeaba6f 55
                  (fn_argument_list
aeaba6f 56
                    (expression
aeaba6f 57
                      (comparison_operator
aeaba6f 58
                        (primary_expression
aeaba6f 59
                          (var_identifier))
aeaba6f 60
                        (primary_expression
aeaba6f 61
                          (integer))))))))))
f997bee 62
        (else_if
f997bee 63
          (expression
f997bee 64
            (comparison_operator
f997bee 65
              (primary_expression
9e7927c 66
                (var_identifier))
f997bee 67
              (primary_expression
f997bee 68
                (integer))))
f997bee 69
          (body
aeaba6f 70
            (expression
aeaba6f 71
              (primary_expression
aeaba6f 72
                (fn_call
aeaba6f 73
                  (var_identifier)
aeaba6f 74
                  (fn_argument_list
aeaba6f 75
                    (expression
aeaba6f 76
                      (comparison_operator
aeaba6f 77
                        (primary_expression
aeaba6f 78
                          (var_identifier))
aeaba6f 79
                        (primary_expression
aeaba6f 80
                          (integer))))))))))
f997bee 81
        (else
f997bee 82
          (body
f997bee 83
            (if
f997bee 84
              (expression
f997bee 85
                (comparison_operator
f997bee 86
                  (primary_expression
9e7927c 87
                    (var_identifier))
f997bee 88
                  (primary_expression
f997bee 89
                    (integer))))
f997bee 90
              (body
aeaba6f 91
                (expression
f997bee 92
                  (primary_expression
f997bee 93
                    (fn_call
f502d22 94
                      (var_identifier)
f502d22 95
                      (fn_argument_list
f997bee 96
                        (expression
f997bee 97
                          (primary_expression
aeaba6f 98
                            (var_identifier))))))))
aeaba6f 99
              (else
aeaba6f 100
                (body
aeaba6f 101
                  (expression
aeaba6f 102
                    (primary_expression
aeaba6f 103
                      (fn_call
aeaba6f 104
                        (var_identifier)
aeaba6f 105
                        (fn_argument_list
aeaba6f 106
                          (expression
aeaba6f 107
                            (primary_expression
aeaba6f 108
                              (string
aeaba6f 109
                                (string_start)
aeaba6f 110
                                (string_content)
aeaba6f 111
                                (string_end)))))))))))))))))