{
"name": "elvish",
"word": "identifier",
"rules": {
"source_file": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_statements"
},
{
"type": "BLANK"
}
]
},
"comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
}
},
"_statements": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "SYMBOL",
"name": "_terminator"
}
]
}
},
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "BLANK"
}
]
}
]
}
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "SYMBOL",
"name": "if"
},
{
"type": "SYMBOL",
"name": "while"
},
{
"type": "SYMBOL",
"name": "for"
},
{
"type": "SYMBOL",
"name": "try"
},
{
"type": "SYMBOL",
"name": "import"
},
{
"type": "SYMBOL",
"name": "function_definition"
},
{
"type": "SYMBOL",
"name": "variable_declaration"
},
{
"type": "SYMBOL",
"name": "variable_assignment"
},
{
"type": "SYMBOL",
"name": "temporary_assignment"
},
{
"type": "SYMBOL",
"name": "variable_deletion"
},
{
"type": "SYMBOL",
"name": "lambda"
},
{
"type": "SYMBOL",
"name": "pipeline"
}
]
},
"_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_literal"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "output_capture"
},
{
"type": "SYMBOL",
"name": "exception_capture"
},
{
"type": "SYMBOL",
"name": "braced_list"
},
{
"type": "SYMBOL",
"name": "indexing"
},
{
"type": "SYMBOL",
"name": "lambda"
},
{
"type": "SYMBOL",
"name": "wildcard"
}
]
},
"_literal": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "_string_like"
},
{
"type": "SYMBOL",
"name": "list"
},
{
"type": "SYMBOL",
"name": "map"
}
]
},
"_terminator": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "STRING",
"value": "\n"
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[\\p{L}\\p{N}_:~-]+"
},
"import": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "use"
},
{
"type": "SYMBOL",
"name": "_string_like"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_string_like"
},
{
"type": "BLANK"
}
]
}
]
},
"command": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "head",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "output_capture"
},
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "/"
},
{
"type": "STRING",
"value": "%"
},
{
"type": "STRING",
"value": "<"
},
{
"type": "STRING",
"value": "<="
},
{
"type": "STRING",
"value": "=="
},
{
"type": "STRING",
"value": "!="
},
{
"type": "STRING",
"value": ">"
},
{
"type": "STRING",
"value": ">="
},
{
"type": "STRING",
"value": "<s"
},
{
"type": "STRING",
"value": "<=s"
},
{
"type": "STRING",
"value": "==s"
},
{
"type": "STRING",
"value": "!=s"
},
{
"type": "STRING",
"value": ">s"
},
{
"type": "STRING",
"value": ">=s"
}
]
}
},
{
"type": "REPEAT",
"content": {
"type": "FIELD",
"name": "argument",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "option"
}
]
}
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "redirection"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "&"
},
{
"type": "BLANK"
}
]
}
]
},
"pipeline": {
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "STRING",
"value": "|"
}
]
}
},
{
"type": "SYMBOL",
"name": "command"
}
]
},
"redirection": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ">"
},
{
"type": "STRING",
"value": "<"
},
{
"type": "STRING",
"value": ">>"
},
{
"type": "STRING",
"value": "<>"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "stdin"
},
{
"type": "STRING",
"value": "stdout"
},
{
"type": "STRING",
"value": "stderr"
}
]
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ">"
}
}
]
}
},
"named": true,
"value": "io_port"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "bareword"
},
"named": true,
"value": "file"
},
{
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "&"
},
{
"type": "BLANK"
}
]
},
{
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "stdin"
},
{
"type": "STRING",
"value": "stdout"
},
{
"type": "STRING",
"value": "stderr"
}
]
}
}
]
}
},
"named": true,
"value": "io_port"
}
]
}
]
},
"variable_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "var"
},
{
"type": "SYMBOL",
"name": "_assignment"
}
]
},
"variable_assignment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "set"
},
{
"type": "SYMBOL",
"name": "_assignment"
}
]
},
"temporary_assignment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "tmp"
},
{
"type": "SYMBOL",
"name": "_assignment"
}
]
},
"variable_deletion": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "del"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
"_assignment": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "["
}
},
{
"type": "ALIAS",
"content": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
"named": true,
"value": "indices"
},
{
"type": "STRING",
"value": "]"
}
]
}
}
]
}
},
"named": true,
"value": "lhs"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "ALIAS",
"content": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
"named": true,
"value": "rhs"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"function_definition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "fn"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "lambda"
}
]
},
"if": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "elif"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else"
},
{
"type": "BLANK"
}
]
}
]
},
"elif": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "elif"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
}
]
},
"else": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
}
]
},
"while": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else"
},
{
"type": "BLANK"
}
]
}
]
},
"for": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "for"
},
{
"type": "FIELD",
"name": "var",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "container",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else"
},
{
"type": "BLANK"
}
]
}
]
},
"try": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "try"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "catch"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "finally"
},
{
"type": "BLANK"
}
]
}
]
},
"catch": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "catch"
},
{
"type": "FIELD",
"name": "exception",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
}
]
},
"finally": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "finally"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
}
]
},
"lambda": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\s+"
},
{
"type": "SYMBOL",
"name": "parameter_list"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": "}"
}
]
},
"parameter_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "|"
},
{
"type": "REPEAT1",
"content": {
"type": "FIELD",
"name": "parameter",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "option"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
}
}
},
{
"type": "STRING",
"value": "|"
}
]
},
"option": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "&"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
"indexing": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "list"
},
{
"type": "SYMBOL",
"name": "map"
},
{
"type": "SYMBOL",
"name": "output_capture"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "["
}
},
{
"type": "ALIAS",
"content": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
"named": true,
"value": "indices"
},
{
"type": "STRING",
"value": "]"
}
]
}
}
]
},
"braced_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"output_capture": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": ")"
}
]
},
"exception_capture": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "?("
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_statements"
},
"named": true,
"value": "chunk"
},
{
"type": "STRING",
"value": ")"
}
]
},
"variable": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
},
"number": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0x"
},
{
"type": "STRING",
"value": "0X"
}
]
},
{
"type": "PATTERN",
"value": "[\\da-fA-F](_?[\\da-fA-F])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0o"
},
{
"type": "STRING",
"value": "0O"
}
]
},
{
"type": "PATTERN",
"value": "[0-7](_?[0-7])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0b"
},
{
"type": "STRING",
"value": "0B"
}
]
},
{
"type": "PATTERN",
"value": "[0-1](_?[0-1])*"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0x"
},
{
"type": "STRING",
"value": "0X"
}
]
},
{
"type": "PATTERN",
"value": "[\\da-fA-F](_?[\\da-fA-F])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0o"
},
{
"type": "STRING",
"value": "0O"
}
]
},
{
"type": "PATTERN",
"value": "[0-7](_?[0-7])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0b"
},
{
"type": "STRING",
"value": "0B"
}
]
},
{
"type": "PATTERN",
"value": "[0-1](_?[0-1])*"
}
]
}
]
},
{
"type": "STRING",
"value": "/"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0x"
},
{
"type": "STRING",
"value": "0X"
}
]
},
{
"type": "PATTERN",
"value": "[\\da-fA-F](_?[\\da-fA-F])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0o"
},
{
"type": "STRING",
"value": "0O"
}
]
},
{
"type": "PATTERN",
"value": "[0-7](_?[0-7])*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0b"
},
{
"type": "STRING",
"value": "0B"
}
]
},
{
"type": "PATTERN",
"value": "[0-1](_?[0-1])*"
}
]
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
}
]
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[eE][+-]?"
},
{
"type": "PATTERN",
"value": "\\d(_?\\d)*"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": "Inf"
},
{
"type": "STRING",
"value": "NaN"
}
]
}
]
}
},
"_string_like": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "bareword"
}
]
},
"string": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "PATTERN",
"value": "([^']|'')*"
},
{
"type": "STRING",
"value": "'"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "PATTERN",
"value": "([^\"]|\\\\\")*"
},
{
"type": "STRING",
"value": "\""
}
]
}
]
}
},
"bareword": {
"type": "PATTERN",
"value": "[\\p{L}\\p{N}!%+,./:@\\\\_~=-]+"
},
"wildcard": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "**"
},
{
"type": "STRING",
"value": "?"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "["
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_expression"
},
"named": true,
"value": "modifier"
},
{
"type": "STRING",
"value": "]"
}
]
}
}
]
},
"list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"map": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "pair"
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"pair": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "&"
},
{
"type": "FIELD",
"name": "key",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [
"_statement",
"_expression",
"_literal",
"_string_like",
"_terminator"
],
"supertypes": []
}