{
  "name": "ride",
  "rules": {
    "source_file": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_directive"
        },
        {
          "type": "SYMBOL",
          "name": "_directive"
        },
        {
          "type": "SYMBOL",
          "name": "_directive"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_definition"
          }
        }
      ]
    },
    "_definition": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "function_definition"
        },
        {
          "type": "SYMBOL",
          "name": "variable_declaration_statement"
        }
      ]
    },
    "function_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "func"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "parameter_list"
        },
        {
          "type": "SYMBOL",
          "name": "_assignment_operator"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "block"
            },
            {
              "type": "SYMBOL",
              "name": "_expression"
            }
          ]
        }
      ]
    },
    "parameter_list": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "parameter_statement"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "parameter_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_statement"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "basic_type"
        },
        {
          "type": "SYMBOL",
          "name": "special_type"
        },
        {
          "type": "SYMBOL",
          "name": "transaction_type"
        },
        {
          "type": "SYMBOL",
          "name": "predefined_data_structures"
        }
      ]
    },
    "basic_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "String"
        },
        {
          "type": "STRING",
          "value": "Int"
        },
        {
          "type": "STRING",
          "value": "Boolean"
        },
        {
          "type": "STRING",
          "value": "ByteVector"
        }
      ]
    },
    "special_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "unit"
        }
      ]
    },
    "transaction_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "AliasTransaction"
        },
        {
          "type": "STRING",
          "value": "BurnTransaction"
        },
        {
          "type": "STRING",
          "value": "DataTransaction"
        },
        {
          "type": "STRING",
          "value": "ExchangeTransaction"
        },
        {
          "type": "STRING",
          "value": "GenesisTransaction"
        },
        {
          "type": "STRING",
          "value": "InvokeScriptTransaction"
        },
        {
          "type": "STRING",
          "value": "IssueTransaction"
        },
        {
          "type": "STRING",
          "value": "LeaseCancelTransaction"
        },
        {
          "type": "STRING",
          "value": "LeaseTransaction"
        },
        {
          "type": "STRING",
          "value": "MassTransferTransaction"
        },
        {
          "type": "STRING",
          "value": "ReissueTransaction"
        },
        {
          "type": "STRING",
          "value": "SetScriptTransaction"
        },
        {
          "type": "STRING",
          "value": "SetAssetScriptTransaction"
        },
        {
          "type": "STRING",
          "value": "SponsorshipTransaction"
        },
        {
          "type": "STRING",
          "value": "UpdateAssetInfoTransaction"
        }
      ]
    },
    "predefined_data_structures": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "Address"
        },
        {
          "type": "STRING",
          "value": "Alias"
        },
        {
          "type": "STRING",
          "value": "DataEntry"
        },
        {
          "type": "STRING",
          "value": "ScriptResult"
        },
        {
          "type": "STRING",
          "value": "Invocation"
        },
        {
          "type": "STRING",
          "value": "ScriptTransfer"
        },
        {
          "type": "STRING",
          "value": "TransferSet"
        },
        {
          "type": "STRING",
          "value": "WriteSet"
        },
        {
          "type": "STRING",
          "value": "AssetInfo"
        },
        {
          "type": "STRING",
          "value": "BlockInfo"
        }
      ]
    },
    "_statement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "variable_declaration_statement"
        },
        {
          "type": "SYMBOL",
          "name": "_type_matching_statement"
        },
        {
          "type": "SYMBOL",
          "name": "_if_statement"
        }
      ]
    },
    "variable_declaration_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "_type_matching_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "case"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "_if_statement": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "_conditional_operator"
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "identifier"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "then"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "else if"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "_expression"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_conditional_operator"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_expression"
                          }
                        ]
                      },
                      {
                        "type": "SYMBOL",
                        "name": "identifier"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "block"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "SYMBOL",
          "name": "type_matching"
        },
        {
          "type": "SYMBOL",
          "name": "list_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "unary_expression"
        },
        {
          "type": "SYMBOL",
          "name": "binary_expression"
        }
      ]
    },
    "_annotation": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "@Callable"
            },
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "@Verifier"
            },
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "identifier"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "identifier": {
      "type": "PATTERN",
      "value": "[a-z]+"
    },
    "number": {
      "type": "PATTERN",
      "value": "\\d+"
    },
    "unary_expression": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "-"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "!"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          }
        ]
      }
    },
    "binary_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "SYMBOL",
                "name": "_arithmetic_operator"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              }
            ]
          }
        }
      ]
    },
    "type_matching": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "match"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        }
      ]
    },
    "list_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "number"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "_arithmetic_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "*"
        },
        {
          "type": "STRING",
          "value": "/"
        }
      ]
    },
    "_conditional_operator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "=="
        },
        {
          "type": "STRING",
          "value": "!="
        },
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "STRING",
          "value": ">"
        },
        {
          "type": "STRING",
          "value": "<="
        },
        {
          "type": "STRING",
          "value": ">="
        }
      ]
    },
    "_directive": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{-#"
        },
        {
          "type": "SYMBOL",
          "name": "directive_type"
        },
        {
          "type": "SYMBOL",
          "name": "directive_value"
        },
        {
          "type": "STRING",
          "value": "#-}"
        }
      ]
    },
    "_assignment_operator": {
      "type": "STRING",
      "value": "="
    },
    "directive_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "STDLIB_VERSION"
        },
        {
          "type": "STRING",
          "value": "CONTENT_TYPE"
        },
        {
          "type": "STRING",
          "value": "SCRIPT_TYPE"
        }
      ]
    },
    "directive_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "number"
        },
        {
          "type": "STRING",
          "value": "EXPRESSION"
        },
        {
          "type": "STRING",
          "value": "ACCOUNT"
        },
        {
          "type": "STRING",
          "value": "ASSET"
        }
      ]
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\s"
    }
  ],
  "conflicts": [],
  "externals": [],
  "inline": [],
  "supertypes": []
}

