{
"name": "fish",
"word": "word",
"rules": {
"program": {
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_terminator"
}
]
}
},
"conditional_execution": {
"type": "CHOICE",
"members": [
{
"type": "PREC_RIGHT",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "and"
},
{
"type": "STRING",
"value": "or"
}
]
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
}
},
{
"type": "PREC_RIGHT",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "||"
},
{
"type": "STRING",
"value": "&&"
}
]
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
}
}
]
},
"pipe": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "&|"
},
{
"type": "STRING",
"value": "2>|"
},
{
"type": "STRING",
"value": "|"
}
]
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
}
},
"redirect_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "file_redirect"
},
{
"type": "SYMBOL",
"name": "stream_redirect"
}
]
}
]
},
"_terminator": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "STRING",
"value": "&"
},
{
"type": "STRING",
"value": "\n"
},
{
"type": "STRING",
"value": "\r"
},
{
"type": "STRING",
"value": "\r\n"
}
]
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "conditional_execution"
},
{
"type": "SYMBOL",
"name": "pipe"
},
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "SYMBOL",
"name": "redirect_statement"
},
{
"type": "SYMBOL",
"name": "begin_statement"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "while_statement"
},
{
"type": "SYMBOL",
"name": "for_statement"
},
{
"type": "SYMBOL",
"name": "switch_statement"
},
{
"type": "SYMBOL",
"name": "function_definition"
},
{
"type": "SYMBOL",
"name": "break"
},
{
"type": "SYMBOL",
"name": "continue"
},
{
"type": "SYMBOL",
"name": "return"
},
{
"type": "SYMBOL",
"name": "negated_statement"
}
]
},
"_terminated_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "SYMBOL",
"name": "_terminator"
}
]
},
"_terminated_opt_statement": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_terminator"
}
]
},
"negated_statement": {
"type": "PREC_LEFT",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "STRING",
"value": "not"
}
]
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
}
},
"command_substitution": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_terminator"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"function_definition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "function"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "REPEAT",
"content": {
"type": "FIELD",
"name": "option",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
},
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_terminated_statement"
}
},
{
"type": "STRING",
"value": "end"
}
]
},
"integer": {
"type": "PATTERN",
"value": "(-|\\+)?\\d+"
},
"float": {
"type": "PATTERN",
"value": "(-|\\+)?\\d+\\.\\d+"
},
"return": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "return"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "BLANK"
}
]
}
]
}
},
"switch_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "switch"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "case_clause"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "end"
}
]
},
"case_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "case"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_statement"
}
},
{
"type": "BLANK"
}
]
}
]
},
"break": {
"type": "STRING",
"value": "break"
},
"continue": {
"type": "STRING",
"value": "continue"
},
"for_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "for"
},
{
"type": "FIELD",
"name": "variable",
"content": {
"type": "SYMBOL",
"name": "variable_name"
}
},
{
"type": "STRING",
"value": "in"
},
{
"type": "REPEAT1",
"content": {
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
},
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_statement"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "end"
}
]
},
"while_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_terminated_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_opt_statement"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "end"
}
]
},
"if_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_terminated_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_opt_statement"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "else_if_clause"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else_clause"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "end"
}
]
},
"else_if_clause": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "STRING",
"value": "if"
}
]
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_terminated_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_opt_statement"
}
},
{
"type": "BLANK"
}
]
}
]
},
"else_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "SYMBOL",
"name": "_terminator"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_opt_statement"
}
},
{
"type": "BLANK"
}
]
}
]
},
"begin_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "begin"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "_terminated_opt_statement"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "end"
}
]
},
"comment": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -11,
"content": {
"type": "PATTERN",
"value": "#.*"
}
}
},
"variable_name": {
"type": "PATTERN",
"value": "[a-zA-Z0-9_]+"
},
"variable_expansion": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable_name"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_concat_list"
},
{
"type": "SYMBOL",
"name": "list_element_access"
}
]
}
}
]
}
},
"index": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer"
},
{
"type": "SYMBOL",
"name": "single_quote_string"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "SYMBOL",
"name": "double_quote_string"
},
{
"type": "SYMBOL",
"name": "command_substitution"
}
]
},
"range": {
"type": "PREC_RIGHT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "index"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ".."
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "index"
},
{
"type": "BLANK"
}
]
}
]
}
},
"list_element_access": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "index"
},
{
"type": "SYMBOL",
"name": "range"
}
]
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"brace_expansion": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_brace_expression"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_brace_expression"
},
{
"type": "BLANK"
}
]
}
]
}
}
]
},
{
"type": "STRING",
"value": "}"
}
]
}
},
"double_quote_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\$\\\\\"]+"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "command_substitution"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
"single_quote_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^'\\\\]+"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{
"type": "STRING",
"value": "'"
}
]
},
"escape_sequence": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^xXuUc]"
},
{
"type": "PATTERN",
"value": "[0-7]{1,3}"
},
{
"type": "PATTERN",
"value": "x[0-9a-fA-F]{0,2}"
},
{
"type": "PATTERN",
"value": "X[0-9a-fA-F]{0,2}"
},
{
"type": "PATTERN",
"value": "u[0-9a-fA-F]{0,4}"
},
{
"type": "PATTERN",
"value": "U[0-9a-fA-F]{0,8}"
},
{
"type": "PATTERN",
"value": "c[a-zA-Z]?"
}
]
}
}
]
}
},
"command": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "redirect",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "file_redirect"
},
{
"type": "SYMBOL",
"name": "stream_redirect"
}
]
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
}
]
}
},
"stream_redirect": {
"type": "PATTERN",
"value": "\\d*(>>|>|<)&[012-]"
},
"direction": {
"type": "PATTERN",
"value": "(\\d*|&)(>>?\\??|<)"
},
"file_redirect": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "SYMBOL",
"name": "direction"
}
},
{
"type": "FIELD",
"name": "destination",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"_special_character": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "]"
}
]
},
"concatenation": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_base_expression"
},
{
"type": "SYMBOL",
"name": "_special_character"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_concat"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_base_expression"
},
{
"type": "SYMBOL",
"name": "_special_character"
},
{
"type": "STRING",
"value": "#"
}
]
}
]
}
}
]
},
"_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_base_expression"
},
{
"type": "SYMBOL",
"name": "concatenation"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_special_character"
},
"named": true,
"value": "word"
}
]
},
"_base_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "command_substitution"
},
{
"type": "SYMBOL",
"name": "single_quote_string"
},
{
"type": "SYMBOL",
"name": "double_quote_string"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "SYMBOL",
"name": "word"
},
{
"type": "SYMBOL",
"name": "integer"
},
{
"type": "SYMBOL",
"name": "float"
},
{
"type": "SYMBOL",
"name": "brace_expansion"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "glob"
},
{
"type": "SYMBOL",
"name": "home_dir_expansion"
}
]
},
"brace_concatenation": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_base_brace_expression"
},
{
"type": "SYMBOL",
"name": "brace_expansion"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_brace_concat"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_base_brace_expression"
},
{
"type": "SYMBOL",
"name": "brace_expansion"
}
]
}
]
}
}
]
},
"_brace_expression": {
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "brace_concatenation"
},
"named": true,
"value": "concatenation"
},
{
"type": "SYMBOL",
"name": "_base_brace_expression"
},
{
"type": "SYMBOL",
"name": "brace_expansion"
}
]
},
"_base_brace_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "command_substitution"
},
{
"type": "SYMBOL",
"name": "single_quote_string"
},
{
"type": "SYMBOL",
"name": "double_quote_string"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "brace_word"
},
"named": true,
"value": "word"
},
{
"type": "SYMBOL",
"name": "integer"
},
{
"type": "SYMBOL",
"name": "float"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "glob"
}
]
},
"home_dir_expansion": {
"type": "STRING",
"value": "~"
},
"glob": {
"type": "TOKEN",
"content": {
"type": "REPEAT1",
"content": {
"type": "STRING",
"value": "*"
}
}
},
"word": {
"type": "PATTERN",
"value": "[^\\$\\*~#\\(\\)\\{\\}\\[\\]<>\"'\\^&\\|;\\\\\\s][^\\$\\*~\\(\\)\\{\\}\\[\\]<>\"'\\^&\\|;\\\\\\s]*"
},
"brace_word": {
"type": "PATTERN",
"value": "[^\\$'\\*\",\\\\\\{\\}\\(\\)]+"
}
},
"extras": [
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "PATTERN",
"value": "[\\u0009-\\u000D\\u0085\\u2028\\u2029\\u0020\\u3000\\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u00A0\\u2007\\u202F]+"
}
],
"conflicts": [],
"precedences": [],
"externals": [
{
"type": "SYMBOL",
"name": "_concat"
},
{
"type": "SYMBOL",
"name": "_brace_concat"
},
{
"type": "SYMBOL",
"name": "_concat_list"
}
],
"inline": [
"_terminator",
"_statement",
"_base_expression"
],
"supertypes": []
}