{ "name": "bash", "rules": { "program": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "command" } }, "command": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "simple_command" }, { "type": "SYMBOL", "name": "pipeline" }, { "type": "SYMBOL", "name": "list" } ] }, { "type": "SYMBOL", "name": "control_operator" } ] }, "simple_command": { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "environment_variable_assignment" }, { "type": "SYMBOL", "name": "file_redirect" } ] } }, { "type": "RENAME", "content": { "type": "SYMBOL", "name": "leading_word" }, "value": "command_name" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "\\s+" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "RENAME", "content": { "type": "SYMBOL", "name": "word" }, "value": "argument" }, { "type": "SYMBOL", "name": "expansion" }, { "type": "SYMBOL", "name": "operator_expansion" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "file_redirect" }, { "type": "SYMBOL", "name": "heredoc_redirect" } ] } } ] }, "pipeline": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "simple_command" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "|" }, { "type": "STRING", "value": "|&" } ] }, { "type": "SYMBOL", "name": "simple_command" } ] } }, "list": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "simple_command" }, { "type": "SYMBOL", "name": "list" }, { "type": "SYMBOL", "name": "pipeline" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "&&" }, { "type": "STRING", "value": ";" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "simple_command" }, { "type": "SYMBOL", "name": "pipeline" } ] } ] } }, "environment_variable_assignment": { "type": "SEQ", "members": [ { "type": "RENAME", "content": { "type": "SYMBOL", "name": "leading_word" }, "value": "variable_name" }, { "type": "STRING", "value": "=" }, { "type": "RENAME", "content": { "type": "SYMBOL", "name": "word" }, "value": "argument" } ] }, "expansion": { "type": "SEQ", "members": [ { "type": "STRING", "value": "$" }, { "type": "RENAME", "content": { "type": "SYMBOL", "name": "word" }, "value": "variable_name" } ] }, "operator_expansion": { "type": "SEQ", "members": [ { "type": "STRING", "value": "${" }, { "type": "RENAME", "content": { "type": "SYMBOL", "name": "leading_word" }, "value": "variable_name" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": ":" }, { "type": "STRING", "value": ":?" }, { "type": "STRING", "value": "=" } ] }, { "type": "RENAME", "content": { "type": "SYMBOL", "name": "word" }, "value": "argument" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "file_redirect": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "file_descriptor" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "<" }, { "type": "STRING", "value": ">" }, { "type": "STRING", "value": "<&" }, { "type": "STRING", "value": ">&" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "file_descriptor" }, { "type": "RENAME", "content": { "type": "SYMBOL", "name": "word" }, "value": "file_name" } ] } ] }, "heredoc_redirect": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "<<" }, { "type": "STRING", "value": "<<-" } ] }, { "type": "SYMBOL", "name": "heredoc" } ] }, "heredoc": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_simple_heredoc" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_heredoc_beginning" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expansion" }, { "type": "SYMBOL", "name": "operator_expansion" }, { "type": "SYMBOL", "name": "_heredoc_middle" } ] } }, { "type": "SYMBOL", "name": "_heredoc_end" } ] } ] }, "file_descriptor": { "type": "TOKEN", "content": { "type": "PREC", "value": 1, "content": { "type": "PATTERN", "value": "\\d+" } } }, "leading_word": { "type": "PATTERN", "value": "[^\\s#=|;:{}]+" }, "word": { "type": "PATTERN", "value": "[^# \\s$<>{}&]+" }, "control_operator": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "\n" }, { "type": "STRING", "value": ";;" } ] }, "comment": { "type": "PATTERN", "value": "#.*" } }, "extras": [ { "type": "SYMBOL", "name": "comment" }, { "type": "PATTERN", "value": "\\s" } ], "conflicts": [], "externals": [ { "type": "SYMBOL", "name": "_simple_heredoc" }, { "type": "SYMBOL", "name": "_heredoc_beginning" }, { "type": "SYMBOL", "name": "_heredoc_middle" }, { "type": "SYMBOL", "name": "_heredoc_end" } ], "inline": [ "control_operator" ] }