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/assign.txt
================================================================================
assign
================================================================================

fun main() =
  sum = 1 + {{2 * 3} / 4}
  enabled = !False
  open = {count > 10} && {enabled == True} || {debug == False}
  countries_list = listOf("US", "INDIA", "CANADA")
  list_ints = listOf(1, 2, 3)
  nested_list_ints = listOf(listOf(1), listOf(2), listOf(3))
  country_codes = mapOf(
    "in" => "INDIA",
    "us" => "United States",
    "ca" => "Canada"
  )
  map_ints = mapOf("a" => 1, "b" => 2)
  nested_map_ints = mapOf("a" => 1, "b" => mapOf("c" => 3, "d" => 4))

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

(source
  (fn
    (fn_identifier)
    (body
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (binary_operator
              (primary_expression
                (integer))
              (primary_expression
                (parenthesized_expression
                  (expression
                    (primary_expression
                      (binary_operator
                        (primary_expression
                          (parenthesized_expression
                            (expression
                              (primary_expression
                                (binary_operator
                                  (primary_expression
                                    (integer))
                                  (primary_expression
                                    (integer)))))))
                        (primary_expression
                          (integer)))))))))))
      (assign
        (var_identifier)
        (expression
          (not_operator
            (expression
              (primary_expression
                (type_identifier))))))
      (assign
        (var_identifier)
        (expression
          (boolean_operator
            (expression
              (boolean_operator
                (expression
                  (primary_expression
                    (parenthesized_expression
                      (expression
                        (comparison_operator
                          (primary_expression
                            (var_identifier))
                          (primary_expression
                            (integer)))))))
                (expression
                  (primary_expression
                    (parenthesized_expression
                      (expression
                        (comparison_operator
                          (primary_expression
                            (var_identifier))
                          (primary_expression
                            (type_identifier)))))))))
            (expression
              (primary_expression
                (parenthesized_expression
                  (expression
                    (comparison_operator
                      (primary_expression
                        (var_identifier))
                      (primary_expression
                        (type_identifier))))))))))
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (fn_call
              (var_identifier)
              (fn_argument_list
                (expression
                  (primary_expression
                    (string
                      (string_start)
                      (string_content)
                      (string_end))))
                (expression
                  (primary_expression
                    (string
                      (string_start)
                      (string_content)
                      (string_end))))
                (expression
                  (primary_expression
                    (string
                      (string_start)
                      (string_content)
                      (string_end)))))))))
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (fn_call
              (var_identifier)
              (fn_argument_list
                (expression
                  (primary_expression
                    (integer)))
                (expression
                  (primary_expression
                    (integer)))
                (expression
                  (primary_expression
                    (integer))))))))
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (fn_call
              (var_identifier)
              (fn_argument_list
                (expression
                  (primary_expression
                    (fn_call
                      (var_identifier)
                      (fn_argument_list
                        (expression
                          (primary_expression
                            (integer)))))))
                (expression
                  (primary_expression
                    (fn_call
                      (var_identifier)
                      (fn_argument_list
                        (expression
                          (primary_expression
                            (integer)))))))
                (expression
                  (primary_expression
                    (fn_call
                      (var_identifier)
                      (fn_argument_list
                        (expression
                          (primary_expression
                            (integer))))))))))))
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (fn_call
              (var_identifier)
              (fn_argument_list
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (string
                        (string_start)
                        (string_content)
                        (string_end)))))
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (string
                        (string_start)
                        (string_content)
                        (string_end)))))
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (string
                        (string_start)
                        (string_content)
                        (string_end))))))))))
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (fn_call
              (var_identifier)
              (fn_argument_list
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (integer))))
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (integer)))))))))
      (assign
        (var_identifier)
        (expression
          (primary_expression
            (fn_call
              (var_identifier)
              (fn_argument_list
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (integer))))
                (pair_argument
                  (string
                    (string_start)
                    (string_content)
                    (string_end))
                  (expression
                    (primary_expression
                      (fn_call
                        (var_identifier)
                        (fn_argument_list
                          (pair_argument
                            (string
                              (string_start)
                              (string_content)
                              (string_end))
                            (expression
                              (primary_expression
                                (integer))))
                          (pair_argument
                            (string
                              (string_start)
                              (string_content)
                              (string_end))
                            (expression
                              (primary_expression
                                (integer)))))))))))))))))

================================================================================
field assignment target
================================================================================

fun main() =
  self.head = value
  self.head.value = x
  a, self.field = 1, 2

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

(source
  (fn
    (fn_identifier)
    (body
      (assign
        (field_target
          (primary_expression
            (self))
          (fn_identifier))
        (expression
          (primary_expression
            (var_identifier))))
      (assign
        (field_target
          (primary_expression
            (attribute
              (primary_expression
                (self))
              (fn_identifier)))
          (fn_identifier))
        (expression
          (primary_expression
            (var_identifier))))
      (assign
        (var_identifier)
        (field_target
          (primary_expression
            (self))
          (fn_identifier))
        (expression
          (primary_expression
            (integer)))
        (expression
          (primary_expression
            (integer)))))))