{
  "name": "precedence_on_subsequence",

  "extras": [
    {"type": "PATTERN", "value": "\\s"}
  ],

  "rules": {
    "expression": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {"type": "SYMBOL", "name": "function_call"},
          {"type": "SYMBOL", "name": "identifier"},
          {"type": "SYMBOL", "name": "scope_resolution"}
        ]
      }
    },

    "function_call": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {"type": "SYMBOL", "name": "identifier"},
            {"type": "SYMBOL", "name": "expression"}
          ]
        },

        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {"type": "SYMBOL", "name": "identifier"},
              {"type": "SYMBOL", "name": "block"}
            ]
          }
        },

        {
          "type": "PREC",
          "value": -1,
          "content": {
            "type": "SEQ",
            "members": [
              {"type": "SYMBOL", "name": "identifier"},
              {"type": "SYMBOL", "name": "do_block"}
            ]
          }
        },

        {
          "type": "SEQ",
          "members": [
            {"type": "SYMBOL", "name": "identifier"},
            {
              "type": "PREC",
              "value": 1,
              "content": {
                "type": "SEQ",
                "members": [
                  {"type": "SYMBOL", "name": "expression"},
                  {"type": "SYMBOL", "name": "block"}
                ]
              }
            }
          ]
        },

        {
          "type": "SEQ",
          "members": [
            {"type": "SYMBOL", "name": "identifier"},
            {
              "type": "PREC",
              "value": -1,
              "content": {
                "type": "SEQ",
                "members": [
                  {"type": "SYMBOL", "name": "expression"},
                  {"type": "SYMBOL", "name": "do_block"}
                ]
              }
            }
          ]
        }
      ]
    },

    "scope_resolution": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {"type": "SYMBOL", "name": "expression"},
              {"type": "STRING", "value": "::"},
              {"type": "SYMBOL", "name": "expression"}
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {"type": "STRING", "value": "::"},
              {"type": "SYMBOL", "name": "expression"}
            ]
          }
        ]
      }
    },

    "block": {
      "type": "STRING",
      "value": "{}"
    },

    "do_block": {
      "type": "STRING",
      "value": "do end"
    },

    "identifier": {
      "type": "PATTERN",
      "value": "[a-zA-Z]+"
    }
  }
}
