{
  "name": "precedence_on_token",

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

  "rules": {
    "program": {
      "type": "REPEAT",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "string"
          },
          {
            "type": "SYMBOL",
            "name": "regex"
          },
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "SYMBOL",
            "name": "slash"
          }
        ]
      }
    },

    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": 1,
        "content": {
          "type": "PATTERN",
          "value": "//.*|/\\*[^*]*\\*/"
        }
      }
    },

    "string": {
      "type": "SEQ",
      "members": [
        {"type": "STRING", "value": "\""},

        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "TOKEN",
                "content": {
                  "type": "PREC",
                  "value": 2,
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\"\n\\\\]+"
                  }
                }
              },
              {
                "type": "SYMBOL",
                "name": "escape_sequence"
              }
            ]
          }
        },

        {"type": "STRING", "value": "\""}
      ]
    },

    "escape_sequence": {
      "type": "PATTERN",
      "value": "\\\\."
    },

    "regex": {
      "type": "PATTERN",
      "value": "/[^/\n]+/[a-z]*"
    },

    "identifier": {
      "type": "PATTERN",
      "value": "[a-z]\\w*"
    },

    "slash": {
      "type": "STRING",
      "value": "/"
    }
  }
}
