[
  {
    "type": "constant",
    "named": true,
    "subtypes": [
      {
        "type": "degree_constant",
        "named": true
      },
      {
        "type": "linear_constant",
        "named": true
      },
      {
        "type": "number_literal",
        "named": true
      }
    ]
  },
  {
    "type": "declaration",
    "named": true,
    "subtypes": [
      {
        "type": "function_declaration",
        "named": true
      },
      {
        "type": "piece_declaration",
        "named": true
      },
      {
        "type": "static_var_declaration",
        "named": true
      }
    ]
  },
  {
    "type": "expression",
    "named": true,
    "subtypes": [
      {
        "type": "binary_expression",
        "named": true
      },
      {
        "type": "constant",
        "named": true
      },
      {
        "type": "false",
        "named": true
      },
      {
        "type": "macro_call_expression",
        "named": true
      },
      {
        "type": "parenthesized_expression",
        "named": true
      },
      {
        "type": "true",
        "named": true
      },
      {
        "type": "unary_expression",
        "named": true
      },
      {
        "type": "varying",
        "named": true
      }
    ]
  },
  {
    "type": "keyword_statement",
    "named": true,
    "subtypes": [
      {
        "type": "attach_unit_statement",
        "named": true
      },
      {
        "type": "cache_statement",
        "named": true
      },
      {
        "type": "call_script_statement",
        "named": true
      },
      {
        "type": "dont_cache_statement",
        "named": true
      },
      {
        "type": "dont_shade_statement",
        "named": true
      },
      {
        "type": "dont_shadow_statement",
        "named": true
      },
      {
        "type": "drop_unit_statement",
        "named": true
      },
      {
        "type": "emit_sfx_statement",
        "named": true
      },
      {
        "type": "explode_statement",
        "named": true
      },
      {
        "type": "get_statement",
        "named": true
      },
      {
        "type": "hide_statement",
        "named": true
      },
      {
        "type": "move_statement",
        "named": true
      },
      {
        "type": "set_signal_mask_statement",
        "named": true
      },
      {
        "type": "set_statement",
        "named": true
      },
      {
        "type": "show_statement",
        "named": true
      },
      {
        "type": "signal_statement",
        "named": true
      },
      {
        "type": "sleep_statement",
        "named": true
      },
      {
        "type": "spin_statement",
        "named": true
      },
      {
        "type": "start_script_statement",
        "named": true
      },
      {
        "type": "stop_spin_statement",
        "named": true
      },
      {
        "type": "turn_statement",
        "named": true
      },
      {
        "type": "wait_for_move_statement",
        "named": true
      },
      {
        "type": "wait_for_turn_statement",
        "named": true
      }
    ]
  },
  {
    "type": "preproc_expression",
    "named": true,
    "subtypes": [
      {
        "type": "constant",
        "named": true
      },
      {
        "type": "define_name",
        "named": true
      },
      {
        "type": "preproc_binary_expression",
        "named": true
      },
      {
        "type": "preproc_call_expression",
        "named": true
      },
      {
        "type": "preproc_defined",
        "named": true
      },
      {
        "type": "preproc_parenthesized_expression",
        "named": true
      },
      {
        "type": "preproc_unary_expression",
        "named": true
      }
    ]
  },
  {
    "type": "statement",
    "named": true,
    "subtypes": [
      {
        "type": ";",
        "named": false
      },
      {
        "type": "assign_statement",
        "named": true
      },
      {
        "type": "compound_statement",
        "named": true
      },
      {
        "type": "if_statement",
        "named": true
      },
      {
        "type": "keyword_statement",
        "named": true
      },
      {
        "type": "return_statement",
        "named": true
      },
      {
        "type": "var_statement",
        "named": true
      },
      {
        "type": "while_statement",
        "named": true
      }
    ]
  },
  {
    "type": "varying",
    "named": true,
    "subtypes": [
      {
        "type": "get_term",
        "named": true
      },
      {
        "type": "rand_call",
        "named": true
      },
      {
        "type": "var_name_term",
        "named": true
      }
    ]
  },
  {
    "type": "argument_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "assign_statement",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "var_name",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "decrement_statement",
          "named": true
        },
        {
          "type": "increment_statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "attach_unit_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "attach-unit",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "axis",
    "named": true,
    "fields": {}
  },
  {
    "type": "binary_expression",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "operator": {
        "multiple": false,
        "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
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "cache_statement",
    "named": true,
    "fields": {
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "cache",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "call_script_statement",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "argument_list",
            "named": true
          }
        ]
      },
      "function": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "func_name",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "call-script",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "compound_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "macro_call_statement",
          "named": true
        },
        {
          "type": "macro_name_statement",
          "named": true
        },
        {
          "type": "preproc_def",
          "named": true
        },
        {
          "type": "preproc_directive",
          "named": true
        },
        {
          "type": "preproc_function_def",
          "named": true
        },
        {
          "type": "preproc_if",
          "named": true
        },
        {
          "type": "preproc_ifdef",
          "named": true
        },
        {
          "type": "preproc_include",
          "named": true
        },
        {
          "type": "preproc_line",
          "named": true
        },
        {
          "type": "preproc_undef",
          "named": true
        },
        {
          "type": "statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "decrement_statement",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "var_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "degree_constant",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "number_literal",
          "named": true
        }
      ]
    }
  },
  {
    "type": "dont_cache_statement",
    "named": true,
    "fields": {
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "dont-cache",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "dont_shade_statement",
    "named": true,
    "fields": {
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "dont-shade",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "dont_shadow_statement",
    "named": true,
    "fields": {
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "dont-shadow",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "drop_unit_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "drop-unit",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "emit_sfx_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "emit-sfx",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "explode_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "explode",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "function_declaration",
    "named": true,
    "fields": {
      "arg": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "arg_name",
            "named": true
          }
        ]
      },
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "compound_statement",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "func_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "get_call",
    "named": true,
    "fields": {
      "arg": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "value_index": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "get_statement",
    "named": true,
    "fields": {
      "call": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "get_call",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "get",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "get_term",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "get_call",
          "named": true
        }
      ]
    }
  },
  {
    "type": "hide_statement",
    "named": true,
    "fields": {
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "hide",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "if_statement",
    "named": true,
    "fields": {
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "else": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "statement",
            "named": true
          }
        ]
      },
      "then": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "statement",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "increment_statement",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "var_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "linear_constant",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "identifier",
          "named": true
        },
        {
          "type": "number_literal",
          "named": true
        }
      ]
    }
  },
  {
    "type": "macro_call_expression",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_argument_list",
            "named": true
          }
        ]
      },
      "function": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "macro_call_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "macro_call_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "macro_name_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "define_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "move_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          },
          {
            "type": "now",
            "named": false
          },
          {
            "type": "speed",
            "named": false
          }
        ]
      },
      "axis": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "axis",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "move",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "parenthesized_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "piece_declaration",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_argument_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "preproc_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "preproc_binary_expression",
    "named": true,
    "fields": {
      "left": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_expression",
            "named": true
          }
        ]
      },
      "operator": {
        "multiple": false,
        "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
          }
        ]
      },
      "right": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_call_expression",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_argument_list",
            "named": true
          }
        ]
      },
      "function": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_def",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_defined",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "define_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "preproc_directive",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_arg",
            "named": true
          }
        ]
      },
      "directive": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_directive_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_elif",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_elif",
            "named": true
          },
          {
            "type": "preproc_elifdef",
            "named": true
          },
          {
            "type": "preproc_else",
            "named": true
          }
        ]
      },
      "body": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "declaration",
            "named": true
          },
          {
            "type": "macro_call_statement",
            "named": true
          },
          {
            "type": "macro_name_statement",
            "named": true
          },
          {
            "type": "preproc_def",
            "named": true
          },
          {
            "type": "preproc_directive",
            "named": true
          },
          {
            "type": "preproc_function_def",
            "named": true
          },
          {
            "type": "preproc_if",
            "named": true
          },
          {
            "type": "preproc_ifdef",
            "named": true
          },
          {
            "type": "preproc_include",
            "named": true
          },
          {
            "type": "preproc_line",
            "named": true
          },
          {
            "type": "preproc_undef",
            "named": true
          },
          {
            "type": "statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_elifdef",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_elif",
            "named": true
          },
          {
            "type": "preproc_elifdef",
            "named": true
          },
          {
            "type": "preproc_else",
            "named": true
          }
        ]
      },
      "body": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "declaration",
            "named": true
          },
          {
            "type": "macro_call_statement",
            "named": true
          },
          {
            "type": "macro_name_statement",
            "named": true
          },
          {
            "type": "preproc_def",
            "named": true
          },
          {
            "type": "preproc_directive",
            "named": true
          },
          {
            "type": "preproc_function_def",
            "named": true
          },
          {
            "type": "preproc_if",
            "named": true
          },
          {
            "type": "preproc_ifdef",
            "named": true
          },
          {
            "type": "preproc_include",
            "named": true
          },
          {
            "type": "preproc_line",
            "named": true
          },
          {
            "type": "preproc_undef",
            "named": true
          },
          {
            "type": "statement",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_else",
    "named": true,
    "fields": {
      "body": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "declaration",
            "named": true
          },
          {
            "type": "macro_call_statement",
            "named": true
          },
          {
            "type": "macro_name_statement",
            "named": true
          },
          {
            "type": "preproc_def",
            "named": true
          },
          {
            "type": "preproc_directive",
            "named": true
          },
          {
            "type": "preproc_function_def",
            "named": true
          },
          {
            "type": "preproc_if",
            "named": true
          },
          {
            "type": "preproc_ifdef",
            "named": true
          },
          {
            "type": "preproc_include",
            "named": true
          },
          {
            "type": "preproc_line",
            "named": true
          },
          {
            "type": "preproc_undef",
            "named": true
          },
          {
            "type": "statement",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_function_def",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      },
      "parameters": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_params",
            "named": true
          }
        ]
      },
      "value": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_arg",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_if",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_elif",
            "named": true
          },
          {
            "type": "preproc_elifdef",
            "named": true
          },
          {
            "type": "preproc_else",
            "named": true
          }
        ]
      },
      "body": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "declaration",
            "named": true
          },
          {
            "type": "macro_call_statement",
            "named": true
          },
          {
            "type": "macro_name_statement",
            "named": true
          },
          {
            "type": "preproc_def",
            "named": true
          },
          {
            "type": "preproc_directive",
            "named": true
          },
          {
            "type": "preproc_function_def",
            "named": true
          },
          {
            "type": "preproc_if",
            "named": true
          },
          {
            "type": "preproc_ifdef",
            "named": true
          },
          {
            "type": "preproc_include",
            "named": true
          },
          {
            "type": "preproc_line",
            "named": true
          },
          {
            "type": "preproc_undef",
            "named": true
          },
          {
            "type": "statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_ifdef",
    "named": true,
    "fields": {
      "alternative": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "preproc_elif",
            "named": true
          },
          {
            "type": "preproc_elifdef",
            "named": true
          },
          {
            "type": "preproc_else",
            "named": true
          }
        ]
      },
      "body": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "declaration",
            "named": true
          },
          {
            "type": "macro_call_statement",
            "named": true
          },
          {
            "type": "macro_name_statement",
            "named": true
          },
          {
            "type": "preproc_def",
            "named": true
          },
          {
            "type": "preproc_directive",
            "named": true
          },
          {
            "type": "preproc_function_def",
            "named": true
          },
          {
            "type": "preproc_if",
            "named": true
          },
          {
            "type": "preproc_ifdef",
            "named": true
          },
          {
            "type": "preproc_include",
            "named": true
          },
          {
            "type": "preproc_line",
            "named": true
          },
          {
            "type": "preproc_undef",
            "named": true
          },
          {
            "type": "statement",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_include",
    "named": true,
    "fields": {
      "path": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          },
          {
            "type": "preproc_call_expression",
            "named": true
          },
          {
            "type": "string_literal",
            "named": true
          },
          {
            "type": "system_lib_string",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_line",
    "named": true,
    "fields": {
      "filename": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "string_literal",
            "named": true
          }
        ]
      },
      "lineno": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "number_literal",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "preproc_params",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "identifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "preproc_parenthesized_expression",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "preproc_expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "preproc_unary_expression",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "preproc_expression",
            "named": true
          }
        ]
      },
      "operator": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "!",
            "named": false
          },
          {
            "type": "+",
            "named": false
          },
          {
            "type": "-",
            "named": false
          },
          {
            "type": "~",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "preproc_undef",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "define_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "rand_call",
    "named": true,
    "fields": {
      "lower_bound": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "upper_bound": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "return_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "expression",
          "named": true
        }
      ]
    }
  },
  {
    "type": "set_signal_mask_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "set-signal-mask",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "set_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "set",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "show_statement",
    "named": true,
    "fields": {
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "show",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "signal_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "signal",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "sleep_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "sleep",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "source_file",
    "named": true,
    "root": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "declaration",
          "named": true
        },
        {
          "type": "macro_call_statement",
          "named": true
        },
        {
          "type": "macro_name_statement",
          "named": true
        },
        {
          "type": "preproc_def",
          "named": true
        },
        {
          "type": "preproc_directive",
          "named": true
        },
        {
          "type": "preproc_function_def",
          "named": true
        },
        {
          "type": "preproc_if",
          "named": true
        },
        {
          "type": "preproc_ifdef",
          "named": true
        },
        {
          "type": "preproc_include",
          "named": true
        },
        {
          "type": "preproc_line",
          "named": true
        },
        {
          "type": "preproc_undef",
          "named": true
        }
      ]
    }
  },
  {
    "type": "spin_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "accelerate",
            "named": false
          },
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "axis": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "axis",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "spin",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "start_script_statement",
    "named": true,
    "fields": {
      "arguments": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "argument_list",
            "named": true
          }
        ]
      },
      "function": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "func_name",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "start-script",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "static_var_declaration",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "var_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "stop_spin_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "decelerate",
            "named": false
          },
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "axis": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "axis",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "stop-spin",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "string_literal",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "escape_sequence",
          "named": true
        },
        {
          "type": "string_content",
          "named": true
        }
      ]
    }
  },
  {
    "type": "turn_statement",
    "named": true,
    "fields": {
      "argument": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          },
          {
            "type": "now",
            "named": false
          },
          {
            "type": "speed",
            "named": false
          }
        ]
      },
      "axis": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "axis",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "turn",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "unary_expression",
    "named": true,
    "fields": {
      "argument": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      },
      "operator": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "!",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "var_statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "var_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "wait_for_move_statement",
    "named": true,
    "fields": {
      "axis": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "axis",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "wait-for-move",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "wait_for_turn_statement",
    "named": true,
    "fields": {
      "axis": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "axis",
            "named": true
          }
        ]
      },
      "keyword": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "wait-for-turn",
            "named": false
          }
        ]
      },
      "piece": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "piece_name",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "while_statement",
    "named": true,
    "fields": {
      "body": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "statement",
            "named": true
          }
        ]
      },
      "condition": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "expression",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "\n",
    "named": false
  },
  {
    "type": "!",
    "named": false
  },
  {
    "type": "!=",
    "named": false
  },
  {
    "type": "\"",
    "named": false
  },
  {
    "type": "#define",
    "named": false
  },
  {
    "type": "#elif",
    "named": false
  },
  {
    "type": "#elifdef",
    "named": false
  },
  {
    "type": "#elifndef",
    "named": false
  },
  {
    "type": "#else",
    "named": false
  },
  {
    "type": "#endif",
    "named": false
  },
  {
    "type": "#if",
    "named": false
  },
  {
    "type": "#ifdef",
    "named": false
  },
  {
    "type": "#ifndef",
    "named": false
  },
  {
    "type": "#include",
    "named": false
  },
  {
    "type": "#line",
    "named": false
  },
  {
    "type": "#undef",
    "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": "accelerate",
    "named": false
  },
  {
    "type": "along",
    "named": false
  },
  {
    "type": "arg_name",
    "named": true
  },
  {
    "type": "around",
    "named": false
  },
  {
    "type": "attach-unit",
    "named": false
  },
  {
    "type": "cache",
    "named": false
  },
  {
    "type": "call-script",
    "named": false
  },
  {
    "type": "comment",
    "named": true,
    "extra": true
  },
  {
    "type": "decelerate",
    "named": false
  },
  {
    "type": "define_name",
    "named": true
  },
  {
    "type": "defined",
    "named": false
  },
  {
    "type": "dont-cache",
    "named": false
  },
  {
    "type": "dont-shade",
    "named": false
  },
  {
    "type": "dont-shadow",
    "named": false
  },
  {
    "type": "drop-unit",
    "named": false
  },
  {
    "type": "else",
    "named": false
  },
  {
    "type": "emit-sfx",
    "named": false
  },
  {
    "type": "escape_sequence",
    "named": true
  },
  {
    "type": "explode",
    "named": false
  },
  {
    "type": "false",
    "named": true
  },
  {
    "type": "from",
    "named": false
  },
  {
    "type": "func_name",
    "named": true
  },
  {
    "type": "get",
    "named": false
  },
  {
    "type": "hide",
    "named": false
  },
  {
    "type": "identifier",
    "named": true
  },
  {
    "type": "if",
    "named": false
  },
  {
    "type": "move",
    "named": false
  },
  {
    "type": "now",
    "named": false
  },
  {
    "type": "number_literal",
    "named": true
  },
  {
    "type": "piece",
    "named": false
  },
  {
    "type": "piece_name",
    "named": true
  },
  {
    "type": "preproc_arg",
    "named": true
  },
  {
    "type": "preproc_directive_name",
    "named": true
  },
  {
    "type": "rand",
    "named": false
  },
  {
    "type": "return",
    "named": false
  },
  {
    "type": "set",
    "named": false
  },
  {
    "type": "set-signal-mask",
    "named": false
  },
  {
    "type": "show",
    "named": false
  },
  {
    "type": "signal",
    "named": false
  },
  {
    "type": "sleep",
    "named": false
  },
  {
    "type": "speed",
    "named": false
  },
  {
    "type": "spin",
    "named": false
  },
  {
    "type": "start-script",
    "named": false
  },
  {
    "type": "static-var",
    "named": false
  },
  {
    "type": "stop-spin",
    "named": false
  },
  {
    "type": "string_content",
    "named": true
  },
  {
    "type": "system_lib_string",
    "named": true
  },
  {
    "type": "to",
    "named": false
  },
  {
    "type": "true",
    "named": true
  },
  {
    "type": "turn",
    "named": false
  },
  {
    "type": "type",
    "named": false
  },
  {
    "type": "var",
    "named": false
  },
  {
    "type": "var_name",
    "named": true
  },
  {
    "type": "wait-for-move",
    "named": false
  },
  {
    "type": "wait-for-turn",
    "named": false
  },
  {
    "type": "while",
    "named": false
  },
  {
    "type": "{",
    "named": false
  },
  {
    "type": "|",
    "named": false
  },
  {
    "type": "||",
    "named": false
  },
  {
    "type": "}",
    "named": false
  },
  {
    "type": "~",
    "named": false
  }
]