UNPKG

tree-sitter-bash

Version:
2,085 lines (2,084 loc) 179 kB
{ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "bash", "word": "word", "rules": { "program": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_statements" }, { "type": "BLANK" } ] }, "_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" } ] } ] } }, "_terminated_statement": { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_statement" }, { "type": "SYMBOL", "name": "_terminator" } ] } }, "_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_statement_not_subshell" }, { "type": "SYMBOL", "name": "subshell" } ] }, "_statement_not_subshell": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "redirected_statement" }, { "type": "SYMBOL", "name": "variable_assignment" }, { "type": "SYMBOL", "name": "variable_assignments" }, { "type": "SYMBOL", "name": "command" }, { "type": "SYMBOL", "name": "declaration_command" }, { "type": "SYMBOL", "name": "unset_command" }, { "type": "SYMBOL", "name": "test_command" }, { "type": "SYMBOL", "name": "negated_command" }, { "type": "SYMBOL", "name": "for_statement" }, { "type": "SYMBOL", "name": "c_style_for_statement" }, { "type": "SYMBOL", "name": "while_statement" }, { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "case_statement" }, { "type": "SYMBOL", "name": "pipeline" }, { "type": "SYMBOL", "name": "list" }, { "type": "SYMBOL", "name": "compound_statement" }, { "type": "SYMBOL", "name": "function_definition" } ] }, "_statement_not_pipeline": { "type": "PREC", "value": 1, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "redirected_statement" }, { "type": "SYMBOL", "name": "variable_assignment" }, { "type": "SYMBOL", "name": "variable_assignments" }, { "type": "SYMBOL", "name": "command" }, { "type": "SYMBOL", "name": "declaration_command" }, { "type": "SYMBOL", "name": "unset_command" }, { "type": "SYMBOL", "name": "test_command" }, { "type": "SYMBOL", "name": "negated_command" }, { "type": "SYMBOL", "name": "for_statement" }, { "type": "SYMBOL", "name": "c_style_for_statement" }, { "type": "SYMBOL", "name": "while_statement" }, { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "case_statement" }, { "type": "SYMBOL", "name": "list" }, { "type": "SYMBOL", "name": "compound_statement" }, { "type": "SYMBOL", "name": "function_definition" }, { "type": "SYMBOL", "name": "subshell" } ] } }, "redirected_statement": { "type": "PREC_DYNAMIC", "value": -1, "content": { "type": "PREC_RIGHT", "value": -1, "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_statement" } }, { "type": "FIELD", "name": "redirect", "content": { "type": "CHOICE", "members": [ { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "file_redirect" }, { "type": "SYMBOL", "name": "heredoc_redirect" } ] } } ] } } ] }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "body", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "while_statement" } ] } }, { "type": "SYMBOL", "name": "herestring_redirect" } ] }, { "type": "FIELD", "name": "redirect", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_redirect" } } }, { "type": "SYMBOL", "name": "herestring_redirect" } ] } } }, "for_statement": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "for" }, { "type": "STRING", "value": "select" } ] }, { "type": "FIELD", "name": "variable", "content": { "type": "SYMBOL", "name": "_simple_variable_name" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "in" }, { "type": "FIELD", "name": "value", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_literal" } } } ] }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_terminator" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "do_group" } } ] }, "c_style_for_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "for" }, { "type": "STRING", "value": "((" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_for_body" } ] }, { "type": "STRING", "value": "))" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": ";" }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "body", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "do_group" }, { "type": "SYMBOL", "name": "compound_statement" } ] } } ] }, "_for_body": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "initializer", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_c_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_c_expression" } ] } } ] }, { "type": "BLANK" } ] } }, { "type": "SYMBOL", "name": "_c_terminator" }, { "type": "FIELD", "name": "condition", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_c_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_c_expression" } ] } } ] }, { "type": "BLANK" } ] } }, { "type": "SYMBOL", "name": "_c_terminator" }, { "type": "FIELD", "name": "update", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_c_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_c_expression" } ] } } ] }, { "type": "BLANK" } ] } } ] }, "_c_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_c_expression_not_assignment" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_c_variable_assignment" }, "named": true, "value": "variable_assignment" } ] }, "_c_expression_not_assignment": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_c_word" }, { "type": "SYMBOL", "name": "simple_expansion" }, { "type": "SYMBOL", "name": "expansion" }, { "type": "SYMBOL", "name": "number" }, { "type": "SYMBOL", "name": "string" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_c_unary_expression" }, "named": true, "value": "unary_expression" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_c_binary_expression" }, "named": true, "value": "binary_expression" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_c_postfix_expression" }, "named": true, "value": "postfix_expression" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_c_parenthesized_expression" }, "named": true, "value": "parenthesized_expression" }, { "type": "SYMBOL", "name": "command_substitution" } ] }, "_c_variable_assignment": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_c_word" }, "named": true, "value": "variable_name" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_c_expression" } } ] }, "_c_unary_expression": { "type": "PREC", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "++" }, { "type": "STRING", "value": "--" } ] } }, { "type": "SYMBOL", "name": "_c_expression_not_assignment" } ] } }, "_c_binary_expression": { "type": "CHOICE", "members": [ { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "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": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 3, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "||" }, { "type": "STRING", "value": "-o" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 4, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "&&" }, { "type": "STRING", "value": "-a" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 5, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "|" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 6, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "^" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 7, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "&" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 8, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "==" }, { "type": "STRING", "value": "!=" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 9, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "<" }, { "type": "STRING", "value": ">" }, { "type": "STRING", "value": "<=" }, { "type": "STRING", "value": ">=" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 12, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "<<" }, { "type": "STRING", "value": ">>" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 13, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "-" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_LEFT", "value": 14, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "*" }, { "type": "STRING", "value": "/" }, { "type": "STRING", "value": "%" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } }, { "type": "PREC_RIGHT", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "**" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_c_expression_not_assignment" } } ] } } ] }, "_c_postfix_expression": { "type": "PREC", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_c_expression_not_assignment" }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "++" }, { "type": "STRING", "value": "--" } ] } } ] } }, "_c_parenthesized_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_c_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_c_expression" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "_c_word": { "type": "ALIAS", "content": { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z0-9_]*" }, "named": true, "value": "word" }, "while_statement": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "while" }, { "type": "STRING", "value": "until" } ] }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_terminated_statement" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "do_group" } } ] }, "do_group": { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminated_statement" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "done" } ] }, "if_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_terminated_statement" } }, { "type": "STRING", "value": "then" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminated_statement" }, { "type": "BLANK" } ] }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "elif_clause" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "else_clause" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "fi" } ] }, "elif_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "elif" }, { "type": "SYMBOL", "name": "_terminated_statement" }, { "type": "STRING", "value": "then" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminated_statement" }, { "type": "BLANK" } ] } ] }, "else_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminated_statement" }, { "type": "BLANK" } ] } ] }, "case_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "case" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_literal" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminator" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "in" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminator" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "case_item" } }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "last_case_item" }, "named": true, "value": "case_item" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "esac" } ] }, "case_item": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "(" }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "value", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_literal" }, { "type": "SYMBOL", "name": "_extglob_blob" } ] } }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "FIELD", "name": "value", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_literal" }, { "type": "SYMBOL", "name": "_extglob_blob" } ] } } ] } }, { "type": "STRING", "value": ")" } ] } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_statements" }, { "type": "BLANK" } ] }, { "type": "PREC", "value": 1, "content": { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "termination", "content": { "type": "STRING", "value": ";;" } }, { "type": "FIELD", "name": "fallthrough", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": ";&" }, { "type": "STRING", "value": ";;&" } ] } } ] } } ] }, "last_case_item": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "(" }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "value", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_literal" }, { "type": "SYMBOL", "name": "_extglob_blob" } ] } }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "FIELD", "name": "value", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_literal" }, { "type": "SYMBOL", "name": "_extglob_blob" } ] } } ] } }, { "type": "STRING", "value": ")" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_statements" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "PREC", "value": 1, "content": { "type": "STRING", "value": ";;" } }, { "type": "BLANK" } ] } ] }, "function_definition": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "function" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "word" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "word" } }, { "type": "STRING", "value": "(" }, { "type": "STRING", "value": ")" } ] } ] }, { "type": "FIELD", "name": "body", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "compound_statement" }, { "type": "SYMBOL", "name": "subshell" }, { "type": "SYMBOL", "name": "test_command" }, { "type": "SYMBOL", "name": "if_statement" } ] } }, { "type": "FIELD", "name": "redirect", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_redirect" }, { "type": "BLANK" } ] } } ] } }, "compound_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_terminated_statement" }, { "type": "BLANK" } ] }, { "type": "TOKEN", "content": { "type": "PREC", "value": -1, "content": { "type": "STRING", "value": "}" } } } ] }, "subshell": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_statements" }, { "type": "STRING", "value": ")" } ] }, "pipeline": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_statement_not_pipeline" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "|" }, { "type": "STRING", "value": "|&" } ] }, { "type": "SYMBOL", "name": "_statement_not_pipeline" } ] } } ] } }, "list": { "type": "PREC_LEFT", "value": -1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_statement" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "&&" }, { "type": "STRING", "value": "||" } ] }, { "type": "SYMBOL", "name": "_statement" } ] } }, "negated_command": { "type": "SEQ", "members": [ { "type": "STRING", "value": "!" }, { "type": "CHOICE", "members": [ { "type": "PREC", "value": 2, "content": { "type": "SYMBOL", "name": "command" } }, { "type": "PREC", "value": 1, "content": { "type": "SYMBOL", "name": "variable_assignment" } }, { "type": "SYMBOL", "name": "test_command" }, { "type": "SYMBOL", "name": "subshell" } ] } ] }, "test_command": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "SYMBOL", "name": "redirected_statement" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ]