[
  {
    "type": "asm_function_body",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "asm_instruction",
          "named": true
        },
        {
          "type": "asm_specifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "asm_instruction",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "asm_instruction",
          "named": true
        },
        {
          "type": "multiline_asm_instruction",
          "named": true
        }
      ]
    }
  },
  {
    "type": "asm_specifier",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "number",
          "named": true
        },
        {
          "type": "parameter",
          "named": true
        }
      ]
    }
  },
  {
    "type": "block_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_statement",
          "named": true
        },
        {
          "type": "do_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "expression_statement",
          "named": true
        },
        {
          "type": "if_statement",
          "named": true
        },
        {
          "type": "repeat_statement",
          "named": true
        },
        {
          "type": "return_statement",
          "named": true
        },
        {
          "type": "try_statement",
          "named": true
        },
        {
          "type": "while_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "const_var_declarations",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "type": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "function_type",
            "named": true
          },
          {
            "type": "hole_type",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "tensor_type",
            "named": true
          },
          {
            "type": "tuple_type",
            "named": true
          },
          {
            "type": "type_identifier",
            "named": true
          },
          {
            "type": "unit_type",
            "named": true
          },
          {
            "type": "var",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "!=",
            "named": false
          },
          {
            "type": "%",
            "named": false
          },
          {
            "type": "%=",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "&=",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "*=",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "+=",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "-=",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "/%",
            "named": false
          },
          {
            "type": "/=",
            "named": false
          },
          {
            "type": ":",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<<=",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "<=>",
            "named": false
          },
          {
            "type": "=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": ">>=",
            "named": false
          },
          {
            "type": "?",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "^%",
            "named": false
          },
          {
            "type": "^%=",
            "named": false
          },
          {
            "type": "^/",
            "named": false
          },
          {
            "type": "^/=",
            "named": false
          },
          {
            "type": "^=",
            "named": false
          },
          {
            "type": "^>>",
            "named": false
          },
          {
            "type": "^>>=",
            "named": false
          },
          {
            "type": "function_application",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          },
          {
            "type": "variable_declaration",
            "named": true
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "|=",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~%",
            "named": false
          },
          {
            "type": "~%=",
            "named": false
          },
          {
            "type": "~/",
            "named": false
          },
          {
            "type": "~/=",
            "named": false
          },
          {
            "type": "~>>",
            "named": false
          },
          {
            "type": "~>>=",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "do_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "block_statement",
            "named": true
          }
        ]
      },
      "postcondition": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "!=",
            "named": false
          },
          {
            "type": "%",
            "named": false
          },
          {
            "type": "%=",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "&=",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "*=",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "+=",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "-=",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "/%",
            "named": false
          },
          {
            "type": "/=",
            "named": false
          },
          {
            "type": ":",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<<=",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "<=>",
            "named": false
          },
          {
            "type": "=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": ">>=",
            "named": false
          },
          {
            "type": "?",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "^%",
            "named": false
          },
          {
            "type": "^%=",
            "named": false
          },
          {
            "type": "^/",
            "named": false
          },
          {
            "type": "^/=",
            "named": false
          },
          {
            "type": "^=",
            "named": false
          },
          {
            "type": "^>>",
            "named": false
          },
          {
            "type": "^>>=",
            "named": false
          },
          {
            "type": "function_application",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          },
          {
            "type": "variable_declaration",
            "named": true
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "|=",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~%",
            "named": false
          },
          {
            "type": "~%=",
            "named": false
          },
          {
            "type": "~/",
            "named": false
          },
          {
            "type": "~/=",
            "named": false
          },
          {
            "type": "~>>",
            "named": false
          },
          {
            "type": "~>>=",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "empty_statement",
    "named": true,
    "fields": {}
  },
  {
    "type": "expression_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function_application",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "method_call",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "parenthesized_expression",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "tensor_expression",
          "named": true
        },
        {
          "type": "tuple_expression",
          "named": true
        },
        {
          "type": "type_expression",
          "named": true
        },
        {
          "type": "underscore",
          "named": true
        },
        {
          "type": "unit_literal",
          "named": true
        },
        {
          "type": "variable_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "function_application",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          }
        ]
      },
      "function": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "function_definition",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "parameter_list",
            "named": true
          }
        ]
      },
      "asm_body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "asm_function_body",
            "named": true
          }
        ]
      },
      "body": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "block_statement",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "function_name",
            "named": true
          }
        ]
      },
      "return_type": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "function_type",
            "named": true
          },
          {
            "type": "hole_type",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "tensor_type",
            "named": true
          },
          {
            "type": "tuple_type",
            "named": true
          },
          {
            "type": "type_identifier",
            "named": true
          },
          {
            "type": "unit_type",
            "named": true
          },
          {
            "type": "var",
            "named": true
          }
        ]
      },
      "specifiers": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "impure",
            "named": false
          },
          {
            "type": "inline",
            "named": true
          },
          {
            "type": "method_id",
            "named": true
          }
        ]
      },
      "type_variables": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "type_variables_list",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "function_type",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "function_type",
          "named": true
        },
        {
          "type": "hole_type",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "tensor_type",
          "named": true
        },
        {
          "type": "tuple_type",
          "named": true
        },
        {
          "type": "type_identifier",
          "named": true
        },
        {
          "type": "unit_type",
          "named": true
        },
        {
          "type": "var",
          "named": true
        }
      ]
    }
  },
  {
    "type": "global_var_declarations",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      },
      "type": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "function_type",
            "named": true
          },
          {
            "type": "hole_type",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "tensor_type",
            "named": true
          },
          {
            "type": "tuple_type",
            "named": true
          },
          {
            "type": "type_identifier",
            "named": true
          },
          {
            "type": "unit_type",
            "named": true
          },
          {
            "type": "var",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "hole_type",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "hole_type",
          "named": true
        }
      ]
    }
  },
  {
    "type": "if_statement",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "!=",
            "named": false
          },
          {
            "type": "%",
            "named": false
          },
          {
            "type": "%=",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "&=",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "*=",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "+=",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "-=",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "/%",
            "named": false
          },
          {
            "type": "/=",
            "named": false
          },
          {
            "type": ":",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<<=",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "<=>",
            "named": false
          },
          {
            "type": "=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": ">>=",
            "named": false
          },
          {
            "type": "?",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "^%",
            "named": false
          },
          {
            "type": "^%=",
            "named": false
          },
          {
            "type": "^/",
            "named": false
          },
          {
            "type": "^/=",
            "named": false
          },
          {
            "type": "^=",
            "named": false
          },
          {
            "type": "^>>",
            "named": false
          },
          {
            "type": "^>>=",
            "named": false
          },
          {
            "type": "block_statement",
            "named": true
          },
          {
            "type": "else",
            "named": false
          },
          {
            "type": "elseif",
            "named": false
          },
          {
            "type": "elseifnot",
            "named": false
          },
          {
            "type": "function_application",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          },
          {
            "type": "variable_declaration",
            "named": true
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "|=",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~%",
            "named": false
          },
          {
            "type": "~%=",
            "named": false
          },
          {
            "type": "~/",
            "named": false
          },
          {
            "type": "~/=",
            "named": false
          },
          {
            "type": "~>>",
            "named": false
          },
          {
            "type": "~>>=",
            "named": false
          }
        ]
      },
      "condition": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "!=",
            "named": false
          },
          {
            "type": "%",
            "named": false
          },
          {
            "type": "%=",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "&=",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "*=",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "+=",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "-=",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "/%",
            "named": false
          },
          {
            "type": "/=",
            "named": false
          },
          {
            "type": ":",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<<=",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "<=>",
            "named": false
          },
          {
            "type": "=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": ">>=",
            "named": false
          },
          {
            "type": "?",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "^%",
            "named": false
          },
          {
            "type": "^%=",
            "named": false
          },
          {
            "type": "^/",
            "named": false
          },
          {
            "type": "^/=",
            "named": false
          },
          {
            "type": "^=",
            "named": false
          },
          {
            "type": "^>>",
            "named": false
          },
          {
            "type": "^>>=",
            "named": false
          },
          {
            "type": "function_application",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          },
          {
            "type": "variable_declaration",
            "named": true
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "|=",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~%",
            "named": false
          },
          {
            "type": "~%=",
            "named": false
          },
          {
            "type": "~/",
            "named": false
          },
          {
            "type": "~/=",
            "named": false
          },
          {
            "type": "~>>",
            "named": false
          },
          {
            "type": "~>>=",
            "named": false
          }
        ]
      },
      "consequent": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "block_statement",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "include_directive",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "include_path",
          "named": true
        }
      ]
    }
  },
  {
    "type": "include_path",
    "named": true,
    "fields": {}
  },
  {
    "type": "inline",
    "named": true,
    "fields": {}
  },
  {
    "type": "method_call",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          }
        ]
      },
      "method_name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "method_id",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "number",
          "named": true
        },
        {
          "type": "string",
          "named": true
        }
      ]
    }
  },
  {
    "type": "multiline_asm_instruction",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "multiline_string_fragment",
          "named": true
        }
      ]
    }
  },
  {
    "type": "multiline_string_fragment",
    "named": true,
    "fields": {}
  },
  {
    "type": "parameter_declaration",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "parameter",
            "named": true
          }
        ]
      },
      "type": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "function_type",
            "named": true
          },
          {
            "type": "hole_type",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "tensor_type",
            "named": true
          },
          {
            "type": "tuple_type",
            "named": true
          },
          {
            "type": "type_identifier",
            "named": true
          },
          {
            "type": "unit_type",
            "named": true
          },
          {
            "type": "var",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "parameter",
          "named": true
        }
      ]
    }
  },
  {
    "type": "parameter_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "parameter_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "parenthesized_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function_application",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "method_call",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "parenthesized_expression",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "tensor_expression",
          "named": true
        },
        {
          "type": "tuple_expression",
          "named": true
        },
        {
          "type": "type_expression",
          "named": true
        },
        {
          "type": "underscore",
          "named": true
        },
        {
          "type": "unit_literal",
          "named": true
        },
        {
          "type": "variable_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "parenthesized_type_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "type_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pragma_directive",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "major_version",
          "named": true
        },
        {
          "type": "minor_version",
          "named": true
        },
        {
          "type": "patch_version",
          "named": true
        },
        {
          "type": "version_operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "primitive_type",
    "named": true,
    "fields": {}
  },
  {
    "type": "repeat_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "block_statement",
            "named": true
          }
        ]
      },
      "count": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "!=",
            "named": false
          },
          {
            "type": "%",
            "named": false
          },
          {
            "type": "%=",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "&=",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "*=",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "+=",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "-=",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "/%",
            "named": false
          },
          {
            "type": "/=",
            "named": false
          },
          {
            "type": ":",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<<=",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "<=>",
            "named": false
          },
          {
            "type": "=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": ">>=",
            "named": false
          },
          {
            "type": "?",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "^%",
            "named": false
          },
          {
            "type": "^%=",
            "named": false
          },
          {
            "type": "^/",
            "named": false
          },
          {
            "type": "^/=",
            "named": false
          },
          {
            "type": "^=",
            "named": false
          },
          {
            "type": "^>>",
            "named": false
          },
          {
            "type": "^>>=",
            "named": false
          },
          {
            "type": "function_application",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          },
          {
            "type": "variable_declaration",
            "named": true
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "|=",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~%",
            "named": false
          },
          {
            "type": "~%=",
            "named": false
          },
          {
            "type": "~/",
            "named": false
          },
          {
            "type": "~/=",
            "named": false
          },
          {
            "type": "~>>",
            "named": false
          },
          {
            "type": "~>>=",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "return_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function_application",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "method_call",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "parenthesized_expression",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "tensor_expression",
          "named": true
        },
        {
          "type": "tuple_expression",
          "named": true
        },
        {
          "type": "type_expression",
          "named": true
        },
        {
          "type": "underscore",
          "named": true
        },
        {
          "type": "unit_literal",
          "named": true
        },
        {
          "type": "variable_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "string",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "string_type",
          "named": true
        }
      ]
    }
  },
  {
    "type": "tensor_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function_application",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "method_call",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "parenthesized_expression",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "tensor_expression",
          "named": true
        },
        {
          "type": "tuple_expression",
          "named": true
        },
        {
          "type": "type_expression",
          "named": true
        },
        {
          "type": "underscore",
          "named": true
        },
        {
          "type": "unit_literal",
          "named": true
        },
        {
          "type": "variable_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "tensor_type",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "function_type",
          "named": true
        },
        {
          "type": "hole_type",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "tensor_type",
          "named": true
        },
        {
          "type": "tuple_type",
          "named": true
        },
        {
          "type": "type_identifier",
          "named": true
        },
        {
          "type": "unit_type",
          "named": true
        },
        {
          "type": "var",
          "named": true
        }
      ]
    }
  },
  {
    "type": "tensor_type_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "type_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "translation_unit",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "const_var_declarations",
          "named": true
        },
        {
          "type": "function_definition",
          "named": true
        },
        {
          "type": "global_var_declarations",
          "named": true
        },
        {
          "type": "include_directive",
          "named": true
        },
        {
          "type": "pragma_directive",
          "named": true
        }
      ]
    }
  },
  {
    "type": "try_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "block_statement",
          "named": true
        },
        {
          "type": "do_statement",
          "named": true
        },
        {
          "type": "empty_statement",
          "named": true
        },
        {
          "type": "expression_statement",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "if_statement",
          "named": true
        },
        {
          "type": "repeat_statement",
          "named": true
        },
        {
          "type": "return_statement",
          "named": true
        },
        {
          "type": "try_statement",
          "named": true
        },
        {
          "type": "while_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "tuple_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function_application",
          "named": true
        },
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "method_call",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "parenthesized_expression",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "tensor_expression",
          "named": true
        },
        {
          "type": "tuple_expression",
          "named": true
        },
        {
          "type": "type_expression",
          "named": true
        },
        {
          "type": "underscore",
          "named": true
        },
        {
          "type": "unit_literal",
          "named": true
        },
        {
          "type": "variable_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "tuple_type",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function_type",
          "named": true
        },
        {
          "type": "hole_type",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "tensor_type",
          "named": true
        },
        {
          "type": "tuple_type",
          "named": true
        },
        {
          "type": "type_identifier",
          "named": true
        },
        {
          "type": "unit_type",
          "named": true
        },
        {
          "type": "var",
          "named": true
        }
      ]
    }
  },
  {
    "type": "tuple_type_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "type_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "parenthesized_type_expression",
          "named": true
        },
        {
          "type": "primitive_type",
          "named": true
        },
        {
          "type": "tensor_type_expression",
          "named": true
        },
        {
          "type": "tuple_type_expression",
          "named": true
        },
        {
          "type": "var",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_identifier",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "type_identifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_variables_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "type_identifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "unit_literal",
    "named": true,
    "fields": {}
  },
  {
    "type": "unit_type",
    "named": true,
    "fields": {}
  },
  {
    "type": "variable_declaration",
    "named": true,
    "fields": {
      "type": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "type_expression",
            "named": true
          }
        ]
      },
      "variable": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "while_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "block_statement",
            "named": true
          }
        ]
      },
      "precondition": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "!=",
            "named": false
          },
          {
            "type": "%",
            "named": false
          },
          {
            "type": "%=",
            "named": false
          },
          {
            "type": "&",
            "named": false
          },
          {
            "type": "&=",
            "named": false
          },
          {
            "type": "*",
            "named": false
          },
          {
            "type": "*=",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "+=",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "-=",
            "named": false
          },
          {
            "type": "/",
            "named": false
          },
          {
            "type": "/%",
            "named": false
          },
          {
            "type": "/=",
            "named": false
          },
          {
            "type": ":",
            "named": false
          },
          {
            "type": "<",
            "named": false
          },
          {
            "type": "<<",
            "named": false
          },
          {
            "type": "<<=",
            "named": false
          },
          {
            "type": "<=",
            "named": false
          },
          {
            "type": "<=>",
            "named": false
          },
          {
            "type": "=",
            "named": false
          },
          {
            "type": "==",
            "named": false
          },
          {
            "type": ">",
            "named": false
          },
          {
            "type": ">=",
            "named": false
          },
          {
            "type": ">>",
            "named": false
          },
          {
            "type": ">>=",
            "named": false
          },
          {
            "type": "?",
            "named": false
          },
          {
            "type": "^",
            "named": false
          },
          {
            "type": "^%",
            "named": false
          },
          {
            "type": "^%=",
            "named": false
          },
          {
            "type": "^/",
            "named": false
          },
          {
            "type": "^/=",
            "named": false
          },
          {
            "type": "^=",
            "named": false
          },
          {
            "type": "^>>",
            "named": false
          },
          {
            "type": "^>>=",
            "named": false
          },
          {
            "type": "function_application",
            "named": true
          },
          {
            "type": "identifier",
            "named": true
          },
          {
            "type": "method_call",
            "named": true
          },
          {
            "type": "number",
            "named": true
          },
          {
            "type": "parenthesized_expression",
            "named": true
          },
          {
            "type": "primitive_type",
            "named": true
          },
          {
            "type": "string",
            "named": true
          },
          {
            "type": "tensor_expression",
            "named": true
          },
          {
            "type": "tuple_expression",
            "named": true
          },
          {
            "type": "type_expression",
            "named": true
          },
          {
            "type": "underscore",
            "named": true
          },
          {
            "type": "unit_literal",
            "named": true
          },
          {
            "type": "variable_declaration",
            "named": true
          },
          {
            "type": "|",
            "named": false
          },
          {
            "type": "|=",
            "named": false
          },
          {
            "type": "~",
            "named": false
          },
          {
            "type": "~%",
            "named": false
          },
          {
            "type": "~%=",
            "named": false
          },
          {
            "type": "~/",
            "named": false
          },
          {
            "type": "~/=",
            "named": false
          },
          {
            "type": "~>>",
            "named": false
          },
          {
            "type": "~>>=",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "!=",
    "named": false
  },
  {
    "type": "\"",
    "named": false
  },
  {
    "type": "\"\"\"",
    "named": false
  },
  {
    "type": "#include",
    "named": false
  },
  {
    "type": "#pragma",
    "named": false
  },
  {
    "type": "%",
    "named": false
  },
  {
    "type": "%=",
    "named": false
  },
  {
    "type": "&",
    "named": false
  },
  {
    "type": "&=",
    "named": false
  },
  {
    "type": "(",
    "named": false
  },
  {
    "type": "()",
    "named": false
  },
  {
    "type": ")",
    "named": false
  },
  {
    "type": "*",
    "named": false
  },
  {
    "type": "*=",
    "named": false
  },
  {
    "type": "+",
    "named": false
  },
  {
    "type": "+=",
    "named": false
  },
  {
    "type": ",",
    "named": false
  },
  {
    "type": "-",
    "named": false
  },
  {
    "type": "-=",
    "named": false
  },
  {
    "type": "->",
    "named": false
  },
  {
    "type": ".",
    "named": false
  },
  {
    "type": "/",
    "named": false
  },
  {
    "type": "/%",
    "named": false
  },
  {
    "type": "/=",
    "named": false
  },
  {
    "type": ":",
    "named": false
  },
  {
    "type": ";",
    "named": false
  },
  {
    "type": "<",
    "named": false
  },
  {
    "type": "<<",
    "named": false
  },
  {
    "type": "<<=",
    "named": false
  },
  {
    "type": "<=",
    "named": false
  },
  {
    "type": "<=>",
    "named": false
  },
  {
    "type": "=",
    "named": false
  },
  {
    "type": "==",
    "named": false
  },
  {
    "type": ">",
    "named": false
  },
  {
    "type": ">=",
    "named": false
  },
  {
    "type": ">>",
    "named": false
  },
  {
    "type": ">>=",
    "named": false
  },
  {
    "type": "?",
    "named": false
  },
  {
    "type": "[",
    "named": false
  },
  {
    "type": "]",
    "named": false
  },
  {
    "type": "^",
    "named": false
  },
  {
    "type": "^%",
    "named": false
  },
  {
    "type": "^%=",
    "named": false
  },
  {
    "type": "^/",
    "named": false
  },
  {
    "type": "^/=",
    "named": false
  },
  {
    "type": "^=",
    "named": false
  },
  {
    "type": "^>>",
    "named": false
  },
  {
    "type": "^>>=",
    "named": false
  },
  {
    "type": "asm",
    "named": false
  },
  {
    "type": "builder",
    "named": false
  },
  {
    "type": "catch",
    "named": false
  },
  {
    "type": "cell",
    "named": false
  },
  {
    "type": "comment",
    "named": true
  },
  {
    "type": "const",
    "named": false
  },
  {
    "type": "cont",
    "named": false
  },
  {
    "type": "do",
    "named": false
  },
  {
    "type": "else",
    "named": false
  },
  {
    "type": "elseif",
    "named": false
  },
  {
    "type": "elseifnot",
    "named": false
  },
  {
    "type": "forall",
    "named": false
  },
  {
    "type": "function_name",
    "named": true
  },
  {
    "type": "global",
    "named": false
  },
  {
    "type": "identifier",
    "named": true
  },
  {
    "type": "if",
    "named": false
  },
  {
    "type": "ifnot",
    "named": false
  },
  {
    "type": "impure",
    "named": false
  },
  {
    "type": "inline",
    "named": false
  },
  {
    "type": "inline_ref",
    "named": false
  },
  {
    "type": "int",
    "named": false
  },
  {
    "type": "major_version",
    "named": true
  },
  {
    "type": "method_id",
    "named": false
  },
  {
    "type": "minor_version",
    "named": true
  },
  {
    "type": "not-version",
    "named": false
  },
  {
    "type": "number",
    "named": true
  },
  {
    "type": "parameter",
    "named": true
  },
  {
    "type": "patch_version",
    "named": true
  },
  {
    "type": "repeat",
    "named": false
  },
  {
    "type": "return",
    "named": false
  },
  {
    "type": "slice",
    "named": false
  },
  {
    "type": "string_type",
    "named": true
  },
  {
    "type": "test-version-set",
    "named": false
  },
  {
    "type": "try",
    "named": false
  },
  {
    "type": "tuple",
    "named": false
  },
  {
    "type": "type",
    "named": false
  },
  {
    "type": "underscore",
    "named": true
  },
  {
    "type": "until",
    "named": false
  },
  {
    "type": "var",
    "named": true
  },
  {
    "type": "version",
    "named": false
  },
  {
    "type": "version_operator",
    "named": true
  },
  {
    "type": "while",
    "named": false
  },
  {
    "type": "{",
    "named": false
  },
  {
    "type": "|",
    "named": false
  },
  {
    "type": "|=",
    "named": false
  },
  {
    "type": "}",
    "named": false
  },
  {
    "type": "~",
    "named": false
  },
  {
    "type": "~%",
    "named": false
  },
  {
    "type": "~%=",
    "named": false
  },
  {
    "type": "~/",
    "named": false
  },
  {
    "type": "~/=",
    "named": false
  },
  {
    "type": "~>>",
    "named": false
  },
  {
    "type": "~>>=",
    "named": false
  }
]