{ "name": "tcl", "word": "simple_word", "rules": { "source_file": { "type": "SYMBOL", "name": "_commands" }, "_commands": { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_terminator" } }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_command" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_terminator" } }, { "type": "SYMBOL", "name": "_command" } ] } } ] }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_terminator" } } ] }, "_terminator": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "\n" }, { "type": "STRING", "value": ";" } ] }, "comment": { "type": "PATTERN", "value": "#[^\\n]*" }, "_builtin": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "conditional" }, { "type": "SYMBOL", "name": "global" }, { "type": "SYMBOL", "name": "namespace" }, { "type": "SYMBOL", "name": "procedure" }, { "type": "SYMBOL", "name": "set" }, { "type": "SYMBOL", "name": "try" }, { "type": "SYMBOL", "name": "foreach" }, { "type": "SYMBOL", "name": "expr_cmd" }, { "type": "SYMBOL", "name": "while" }, { "type": "SYMBOL", "name": "catch" } ] }, "while": { "type": "SEQ", "members": [ { "type": "STRING", "value": "while" }, { "type": "SYMBOL", "name": "expr" }, { "type": "SYMBOL", "name": "_word" } ] }, "expr_cmd": { "type": "SEQ", "members": [ { "type": "STRING", "value": "expr" }, { "type": "SYMBOL", "name": "expr" } ] }, "foreach": { "type": "SEQ", "members": [ { "type": "STRING", "value": "foreach" }, { "type": "SYMBOL", "name": "arguments" }, { "type": "SYMBOL", "name": "_word_simple" }, { "type": "SYMBOL", "name": "_word" } ] }, "global": { "type": "SEQ", "members": [ { "type": "STRING", "value": "global" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_concat_word" } } ] }, "namespace": { "type": "SEQ", "members": [ { "type": "STRING", "value": "namespace" }, { "type": "SYMBOL", "name": "word_list" } ] }, "try": { "type": "SEQ", "members": [ { "type": "STRING", "value": "try" }, { "type": "SYMBOL", "name": "_word" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "on" }, { "type": "STRING", "value": "error" }, { "type": "SYMBOL", "name": "arguments" }, { "type": "SYMBOL", "name": "_word" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "finally" }, { "type": "BLANK" } ] } ] }, "finally": { "type": "SEQ", "members": [ { "type": "STRING", "value": "finally" }, { "type": "SYMBOL", "name": "_word" } ] }, "_command": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_builtin" }, { "type": "SYMBOL", "name": "comment" }, { "type": "SYMBOL", "name": "command" } ] }, "command": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "_word" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "arguments", "content": { "type": "SYMBOL", "name": "word_list" } }, { "type": "BLANK" } ] } ] }, "word_list": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_word" } }, "unpack": { "type": "STRING", "value": "{*}" }, "_word": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "unpack" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "braced_word" }, { "type": "SYMBOL", "name": "_concat_word" } ] } ] }, "_word_simple": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "braced_word_simple" }, { "type": "SYMBOL", "name": "_concat_word" } ] } ] }, "_concat_word": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escaped_character" }, { "type": "SYMBOL", "name": "command_substitution" }, { "type": "SYMBOL", "name": "simple_word" }, { "type": "SYMBOL", "name": "quoted_word" }, { "type": "SYMBOL", "name": "variable_substitution" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "concat" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escaped_character" }, { "type": "SYMBOL", "name": "command_substitution" }, { "type": "SYMBOL", "name": "simple_word" }, { "type": "SYMBOL", "name": "quoted_word" }, { "type": "SYMBOL", "name": "variable_substitution" } ] } ] } } ] }, "_ident": { "type": "IMMEDIATE_TOKEN", "content": { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z0-9_]*" } }, "id": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_ns_delim" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_ident" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_ns_delim" }, { "type": "SYMBOL", "name": "_ident" } ] } } ] } ] }, "array_index": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_concat_word" }, { "type": "STRING", "value": ")" } ] }, "variable_substitution": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "$" }, { "type": "SYMBOL", "name": "id" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "$" }, { "type": "STRING", "value": "{" }, { "type": "PATTERN", "value": "[^}]+" }, { "type": "STRING", "value": "}" } ] } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "array_index" }, { "type": "BLANK" } ] } ] }, "braced_word": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_commands" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "braced_word_simple": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "braced_word_simple" }, { "type": "SYMBOL", "name": "_concat_word" } ] } }, { "type": "STRING", "value": "}" } ] }, "set": { "type": "SEQ", "members": [ { "type": "STRING", "value": "set" }, { "type": "SYMBOL", "name": "_word" }, { "type": "SYMBOL", "name": "_word" } ] }, "procedure": { "type": "SEQ", "members": [ { "type": "STRING", "value": "proc" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "_word" } }, { "type": "FIELD", "name": "arguments", "content": { "type": "SYMBOL", "name": "arguments" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_word" } } ] }, "_argument_word": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "simple_word" }, { "type": "SYMBOL", "name": "quoted_word" }, { "type": "SYMBOL", "name": "braced_word" } ] }, "argument": { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "simple_word" } }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "simple_word" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "default", "content": { "type": "SYMBOL", "name": "_argument_word" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] } ] }, "arguments": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "argument" } }, { "type": "STRING", "value": "}" } ] }, { "type": "SYMBOL", "name": "simple_word" } ] }, "_expr": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": ")" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "simple_word" }, { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": ")" } ] }, { "type": "SYMBOL", "name": "unary_expr" }, { "type": "SYMBOL", "name": "binop_expr" }, { "type": "SYMBOL", "name": "ternary_expr" }, { "type": "SYMBOL", "name": "_concat_word" } ] }, "expr": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "}" } ] }, { "type": "SYMBOL", "name": "_expr" } ] }, "unary_expr": { "type": "PREC_LEFT", "value": 150, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "~" }, { "type": "STRING", "value": "!" } ] }, { "type": "SYMBOL", "name": "_expr" } ] } }, "binop_expr": { "type": "CHOICE", "members": [ { "type": "PREC_LEFT", "value": 140, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "**" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 130, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "/" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 130, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "*" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 130, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "%" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 120, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "+" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 120, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "-" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 110, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "<<" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 110, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": ">>" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 100, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": ">" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 100, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "<" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 100, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": ">=" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 100, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "<=" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 90, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "==" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 90, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "!=" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 80, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "eq" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 80, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "ne" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 70, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "in" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_concat_word" }, { "type": "SYMBOL", "name": "braced_word_simple" } ] } ] } }, { "type": "PREC_LEFT", "value": 70, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "ni" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_concat_word" }, { "type": "SYMBOL", "name": "braced_word_simple" } ] } ] } }, { "type": "PREC_LEFT", "value": 60, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "&" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 50, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "^" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 40, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 30, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "&&" }, { "type": "SYMBOL", "name": "_expr" } ] } }, { "type": "PREC_LEFT", "value": 20, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "||" }, { "type": "SYMBOL", "name": "_expr" } ] } } ] }, "ternary_expr": { "type": "PREC_LEFT", "value": 10, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": "?" }, { "type": "SYMBOL", "name": "_expr" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "_expr" } ] } }, "elseif": { "type": "SEQ", "members": [ { "type": "STRING", "value": "elseif" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expr" } }, { "type": "SYMBOL", "name": "_word" } ] }, "else": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "SYMBOL", "name": "_word" } ] }, "conditional": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expr" } }, { "type": "SYMBOL", "name": "_word" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "elseif" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "else" }, { "type": "BLANK" } ] } ] }, "catch": { "type": "SEQ", "members": [ { "type": "STRING", "value": "catch" }, { "type": "SYMBOL", "name": "_word" } ] }, "quoted_word": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "variable_substitution" }, { "type": "SYMBOL", "name": "_quoted_word_content" }, { "type": "SYMBOL", "name": "command_substitution" }, { "type": "SYMBOL", "name": "escaped_character" } ] } }, { "type": "STRING", "value": "\"" } ] }, "escaped_character": { "type": "PATTERN", "value": "\\\\." }, "_quoted_word_content": { "type": "TOKEN", "content": { "type": "PREC", "value": -1, "content": { "type": "PATTERN", "value": "[^$\\\\\\[\\]\"]+" } } }, "command_substitution": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "_command" }, { "type": "STRING", "value": "]" } ] }, "simple_word": { "type": "TOKEN", "content": { "type": "PATTERN", "value": "[^!$\\s\\\\\\[\\]{}();\"]+" } } }, "extras": [ { "type": "PATTERN", "value": "\\s+" }, { "type": "PATTERN", "value": "\\\\\\r?\\n" } ], "conflicts": [], "precedences": [], "externals": [ { "type": "SYMBOL", "name": "concat" }, { "type": "SYMBOL", "name": "_ns_delim" } ], "inline": [ "_commands", "_builtin", "_terminator", "_word" ], "supertypes": [] }