{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "dockerfile",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_instruction"
},
{
"type": "STRING",
"value": "\n"
}
]
}
},
"_instruction": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "from_instruction"
},
{
"type": "SYMBOL",
"name": "run_instruction"
},
{
"type": "SYMBOL",
"name": "cmd_instruction"
},
{
"type": "SYMBOL",
"name": "label_instruction"
},
{
"type": "SYMBOL",
"name": "expose_instruction"
},
{
"type": "SYMBOL",
"name": "env_instruction"
},
{
"type": "SYMBOL",
"name": "add_instruction"
},
{
"type": "SYMBOL",
"name": "copy_instruction"
},
{
"type": "SYMBOL",
"name": "entrypoint_instruction"
},
{
"type": "SYMBOL",
"name": "volume_instruction"
},
{
"type": "SYMBOL",
"name": "user_instruction"
},
{
"type": "SYMBOL",
"name": "workdir_instruction"
},
{
"type": "SYMBOL",
"name": "arg_instruction"
},
{
"type": "SYMBOL",
"name": "onbuild_instruction"
},
{
"type": "SYMBOL",
"name": "stopsignal_instruction"
},
{
"type": "SYMBOL",
"name": "healthcheck_instruction"
},
{
"type": "SYMBOL",
"name": "shell_instruction"
},
{
"type": "SYMBOL",
"name": "maintainer_instruction"
},
{
"type": "SYMBOL",
"name": "cross_build_instruction"
}
]
},
"from_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[fF][rR][oO][mM]"
},
"named": false,
"value": "FROM"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "param"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "image_spec"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][sS]"
},
"named": false,
"value": "AS"
},
{
"type": "FIELD",
"name": "as",
"content": {
"type": "SYMBOL",
"name": "image_alias"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"run_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[rR][uU][nN]"
},
"named": false,
"value": "RUN"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "param"
},
{
"type": "SYMBOL",
"name": "mount_param"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "json_string_array"
},
{
"type": "SYMBOL",
"name": "shell_command"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "heredoc_block"
}
}
]
},
"cmd_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][mM][dD]"
},
"named": false,
"value": "CMD"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "json_string_array"
},
{
"type": "SYMBOL",
"name": "shell_command"
}
]
}
]
},
"label_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[lL][aA][bB][eE][lL]"
},
"named": false,
"value": "LABEL"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "label_pair"
}
}
]
},
"expose_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][xX][pP][oO][sS][eE]"
},
"named": false,
"value": "EXPOSE"
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expose_port"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
}
}
]
},
"env_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][vV]"
},
"named": false,
"value": "ENV"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "env_pair"
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_spaced_env_pair"
},
"named": true,
"value": "env_pair"
}
]
}
]
},
"add_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][dD][dD]"
},
"named": false,
"value": "ADD"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "param"
}
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "path_with_heredoc"
},
"named": true,
"value": "path"
},
{
"type": "SYMBOL",
"name": "_non_newline_whitespace"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "path_with_heredoc"
},
"named": true,
"value": "path"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "heredoc_block"
}
}
]
},
"copy_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][oO][pP][yY]"
},
"named": false,
"value": "COPY"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "param"
}
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "path_with_heredoc"
},
"named": true,
"value": "path"
},
{
"type": "SYMBOL",
"name": "_non_newline_whitespace"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "path_with_heredoc"
},
"named": true,
"value": "path"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "heredoc_block"
}
}
]
},
"entrypoint_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][tT][rR][yY][pP][oO][iI][nN][tT]"
},
"named": false,
"value": "ENTRYPOINT"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "json_string_array"
},
{
"type": "SYMBOL",
"name": "shell_command"
}
]
}
]
},
"volume_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[vV][oO][lL][uU][mM][eE]"
},
"named": false,
"value": "VOLUME"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "json_string_array"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "path"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_non_newline_whitespace"
},
{
"type": "SYMBOL",
"name": "path"
}
]
}
}
]
}
]
}
]
},
"user_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[uU][sS][eE][rR]"
},
"named": false,
"value": "USER"
},
{
"type": "FIELD",
"name": "user",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_user_name_or_group"
},
"named": true,
"value": "unquoted_string"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ":"
}
},
{
"type": "FIELD",
"name": "group",
"content": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_immediate_user_name_or_group"
},
"named": true,
"value": "unquoted_string"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"_user_name_or_group": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "([a-zA-Z][-A-Za-z0-9_]*|[0-9]+)"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_immediate_user_name_or_group_fragment"
}
}
]
},
"_immediate_user_name_or_group": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_immediate_user_name_or_group_fragment"
}
},
"_immediate_user_name_or_group_fragment": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "([a-zA-Z][-a-zA-Z0-9_]*|[0-9]+)"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
},
"workdir_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[wW][oO][rR][kK][dD][iI][rR]"
},
"named": false,
"value": "WORKDIR"
},
{
"type": "SYMBOL",
"name": "path"
}
]
},
"arg_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][rR][gG]"
},
"named": false,
"value": "ARG"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z0-9_]+"
},
"named": true,
"value": "unquoted_string"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
},
{
"type": "FIELD",
"name": "default",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "double_quoted_string"
},
{
"type": "SYMBOL",
"name": "single_quoted_string"
},
{
"type": "SYMBOL",
"name": "unquoted_string"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"onbuild_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[oO][nN][bB][uU][iI][lL][dD]"
},
"named": false,
"value": "ONBUILD"
},
{
"type": "SYMBOL",
"name": "_instruction"
}
]
},
"stopsignal_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][tT][oO][pP][sS][iI][gG][nN][aA][lL]"
},
"named": false,
"value": "STOPSIGNAL"
},
{
"type": "SYMBOL",
"name": "_stopsignal_value"
}
]
},
"_stopsignal_value": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[A-Z0-9]+"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[A-Z0-9]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
},
"healthcheck_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[hH][eE][aA][lL][tT][hH][cC][hH][eE][cC][kK]"
},
"named": false,
"value": "HEALTHCHECK"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "NONE"
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "param"
}
},
{
"type": "SYMBOL",
"name": "cmd_instruction"
}
]
}
]
}
]
},
"shell_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][hH][eE][lL][lL]"
},
"named": false,
"value": "SHELL"
},
{
"type": "SYMBOL",
"name": "json_string_array"
}
]
},
"maintainer_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[mM][aA][iI][nN][tT][aA][iI][nN][eE][rR]"
},
"named": false,
"value": "MAINTAINER"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
"cross_build_instruction": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][rR][oO][sS][sS]_[bB][uU][iI][lL][dD][a-zA-Z_]*"
},
"named": false,
"value": "CROSS_BUILD"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
"heredoc_block": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "heredoc_nl"
},
"named": false,
"value": "_heredoc_nl"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "heredoc_line"
},
{
"type": "STRING",
"value": "\n"
}
]
}
},
{
"type": "SYMBOL",
"name": "heredoc_end"
}
]
},
"path": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^-\\s\\$<]"
},
{
"type": "PATTERN",
"value": "<[^<]"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\s\\$]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
},
"path_with_heredoc": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "heredoc_marker"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^-\\s\\$<]"
},
{
"type": "PATTERN",
"value": "<[^-\\s\\$<]"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\s\\$]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
}
]
},
"expansion": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "SYMBOL",
"name": "_expansion_body"
}
]
},
"_immediate_expansion": {
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_imm_expansion"
},
"named": true,
"value": "expansion"
},
"_imm_expansion": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "$"
}
},
{
"type": "SYMBOL",
"name": "_expansion_body"
}
]
},
"_expansion_body": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "{"
}
},
{
"type": "ALIAS",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\}]+"
}
},
"named": true,
"value": "variable"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "}"
}
}
]
}
]
},
"variable": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z_][a-zA-Z0-9_]*"
}
},
"env_pair": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_env_key"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "double_quoted_string"
},
{
"type": "SYMBOL",
"name": "single_quoted_string"
},
{
"type": "SYMBOL",
"name": "unquoted_string"
}
]
}
},
{
"type": "BLANK"
}
]
}
]
},
"_spaced_env_pair": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_env_key"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\s+"
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "double_quoted_string"
},
{
"type": "SYMBOL",
"name": "single_quoted_string"
},
{
"type": "SYMBOL",
"name": "unquoted_string"
}
]
}
}
]
},
"_env_key": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z_][a-zA-Z0-9_]*"
},
"named": true,
"value": "unquoted_string"
},
"expose_port": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\d+(-\\d+)?"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "/tcp"
},
{
"type": "STRING",
"value": "/udp"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"label_pair": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "key",
"content": {
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[-a-zA-Z0-9\\._]+"
},
"named": true,
"value": "unquoted_string"
},
{
"type": "SYMBOL",
"name": "double_quoted_string"
},
{
"type": "SYMBOL",
"name": "single_quoted_string"
}
]
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "double_quoted_string"
},
{
"type": "SYMBOL",
"name": "single_quoted_string"
},
{
"type": "SYMBOL",
"name": "unquoted_string"
}
]
}
}
]
},
"image_spec": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "image_name"
}
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "tag",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "image_tag"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "FIELD",
"name": "digest",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "image_digest"
},
{
"type": "BLANK"
}
]
}
}
]
}
]
},
"image_name": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^@:\\s\\$-]"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^@:\\s\\$]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
},
"image_tag": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ":"
}
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^@\\s\\$]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
},
"image_digest": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "@"
}
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z0-9:]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
},
"param": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "--"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-z][-a-z]*"
}
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\s]+"
}
}
}
]
},
"mount_param": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "--"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "mount"
}
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "mount_param_param"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ","
}
},
{
"type": "SYMBOL",
"name": "mount_param_param"
}
]
}
}
]
}
}
]
},
"mount_param_param": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\s=,]+"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "="
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\s=,]+"
}
}
]
},
"image_alias": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[-a-zA-Z0-9_]+"
},
{
"type": "SYMBOL",
"name": "expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[-a-zA-Z0-9_]+"
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
}
]
},
"shell_command": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "shell_fragment"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "required_line_continuation"
},
"named": true,
"value": "line_continuation"
},
{
"type": "SYMBOL",
"name": "shell_fragment"
}
]
}
}
]
},
"shell_fragment": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "heredoc_marker"
},
{
"type": "PATTERN",
"value": "[ \\t]*"
}
]
},
{
"type": "PATTERN",
"value": "[,=-]"
},
{
"type": "PATTERN",
"value": "[^\\\\\\[\\n#\\s,=-][^\\\\\\n<]*"
},
{
"type": "PATTERN",
"value": "\\\\[^\\n,=-]"
},
{
"type": "PATTERN",
"value": "<[^<]"
}
]
}
},
"line_continuation": {
"type": "PATTERN",
"value": "\\\\[ \\t]*\\n"
},
"required_line_continuation": {
"type": "STRING",
"value": "\\\n"
},
"json_string_array": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "json_string"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "json_string"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"json_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\"\\\\]+"
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "json_escape_sequence"
},
"named": true,
"value": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
"json_escape_sequence": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\\\(?:[\"\\\\/bfnrt]|u[0-9A-Fa-f]{4})"
}
},
"double_quoted_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\"\\n\\\\\\$]+"
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "double_quoted_escape_sequence"
},
"named": true,
"value": "escape_sequence"
},
{
"type": "STRING",
"value": "\\"
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
"single_quoted_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^'\\n\\\\]+"
}
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "single_quoted_escape_sequence"
},
"named": true,
"value": "escape_sequence"
},
{
"type": "STRING",
"value": "\\"
}
]
}
},
{
"type": "STRING",
"value": "'"
}
]
},
"unquoted_string": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\s\\n\\\"'\\\\\\$]+"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "\\ "
}
},
{
"type": "SYMBOL",
"name": "_immediate_expansion"
}
]
}
},
"double_quoted_escape_sequence": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "\\\\"
},
{
"type": "STRING",
"value": "\\\""
}
]
}
},
"single_quoted_escape_sequence": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "\\\\"
},
{
"type": "STRING",
"value": "\\'"
}
]
}
},
"_non_newline_whitespace": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[\\t ]+"
}
},
"comment": {
"type": "PATTERN",
"value": "#.*"
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s+"
},
{
"type": "SYMBOL",
"name": "line_continuation"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [],
"precedences": [],
"externals": [
{
"type": "SYMBOL",
"name": "heredoc_marker"
},
{
"type": "SYMBOL",
"name": "heredoc_line"
},
{
"type": "SYMBOL",
"name": "heredoc_end"
},
{
"type": "SYMBOL",
"name": "heredoc_nl"
},
{
"type": "SYMBOL",
"name": "error_sentinel"
}
],
"inline": [],
"supertypes": []
}