{
  "name": "Shen",
  "scopeName": "source.shen",
  "patterns": [
    {
      "include": "#expressions"
    }
  ],
  "repository": {
    "atoms": {
      "patterns": [
        {
          "name": "string.quoted.double",
          "begin": "(\\\")",
          "end": "(\\\")",
          "patterns": [
            {
              "name": "constant.character.escape",
              "match": "(~A|~R|~S|~%|c#\\d+;)"
            },
            {
              "name": "invalid.illegal",
              "match": "(c#[^;]*;)"
            }
          ]
        },
        {
          "name": "constant.numeric",
          "match": "(?\u003c=^|[\\s()\\[\\]])[+-]*\\d+\\.?\\d*(?=$|[\\s;()\\[\\]])"
        },
        {
          "name": "invalid.illegal",
          "match": "(?\u003c=^|[\\s()\\[\\]])[+-]*\\d+\\.?\\d*[^\\s;()\\[\\]]+(?=$|[\\s;()\\[\\]])"
        },
        {
          "name": "keyword.control",
          "match": "(?\u003c=\\()(and|or|if|do|lambda|freeze|let|cond|cases|trap-error|where|package|defun|/.|define|defmacro|defcc|defprolog|datatype)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "keyword.control",
          "match": "(?\u003c=^|[\\s()\\[\\]{}])(-\u003e|\u003c-|--\u003e|\u003c--|==\u003e|\u003c==|:=|__+)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "keyword.operator",
          "match": "(?\u003c=^|[\\s()\\[\\]{}])(=|==|\u003c|\u003e|\u003c=|\u003e=|\\+|-|\\*|/)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "entity.name.function",
          "match": "(?\u003c=\\(define\\s)([^\\s()\\[\\]{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "entity.name.function",
          "match": "(?\u003c=\\(defmacro\\s)([^\\s()\\[\\]{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "entity.name.function",
          "match": "(?\u003c=\\(defprolog\\s)([^\\s()\\[\\]{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "entity.name.section",
          "match": "(?\u003c=\\(package\\s)([^\\s()\\[\\]{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "entity.name.type",
          "match": "(?\u003c=\\(datatype\\s)([^\\s()\\[\\]{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "variable.language",
          "match": "(?\u003c=^|[\\s()\\[\\]{}])([A-Z][^\\s()\\[\\];{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "entity.name.tag",
          "match": "(?\u003c=^|[\\s()\\[\\]])(\u003c[^\\s()\\[\\]]*\u003e)(?=$|[\\s;()\\[\\]])"
        },
        {
          "name": "constant.language",
          "match": "(?\u003c=^|[\\s)\\[\\]{}])([^A-Z\\s()\\[\\]:;\\|{}][^\\s()\\[\\];{}]*)(?=$|[\\s;()\\[\\]{}])"
        },
        {
          "name": "constant.language",
          "match": "(\\(\\)|\\[\\])"
        }
      ]
    },
    "comments": {
      "patterns": [
        {
          "name": "comment.line",
          "match": "(\\\\\\\\.*$)"
        },
        {
          "name": "comment.block",
          "begin": "(\\\\\\*)",
          "end": "(\\*\\\\)"
        }
      ]
    },
    "expressions": {
      "patterns": [
        {
          "include": "#comments"
        },
        {
          "include": "#atoms"
        },
        {
          "include": "#parens"
        },
        {
          "include": "#squares"
        }
      ]
    },
    "parens": {
      "patterns": [
        {
          "name": "meta.group",
          "begin": "(\\()",
          "end": "(\\))",
          "patterns": [
            {
              "include": "#expressions"
            }
          ]
        }
      ]
    },
    "squares": {
      "patterns": [
        {
          "name": "meta.group",
          "begin": "(\\[)",
          "end": "(\\])",
          "patterns": [
            {
              "include": "#expressions"
            }
          ]
        }
      ]
    }
  }
}