{ "name": "Jison", "scopeName": "source.jison", "patterns": [ { "begin": "%%", "patterns": [ { "begin": "%%", "patterns": [ { "name": "meta.section.epilogue.jison", "contentName": "source.js.embedded.jison", "begin": "\\G", "patterns": [ { "include": "#epilogue_section" } ] } ], "beginCaptures": { "0": { "name": "meta.separator.section.jison" } } }, { "name": "meta.section.rules.jison", "begin": "\\G", "end": "(?=%%)", "patterns": [ { "include": "#rules_section" } ] } ], "beginCaptures": { "0": { "name": "meta.separator.section.jison" } } }, { "name": "meta.section.declarations.jison", "begin": "^", "end": "(?=%%)", "patterns": [ { "include": "#declarations_section" } ] } ], "repository": { "actions": { "patterns": [ { "name": "meta.action.jison", "contentName": "source.js.embedded.jison", "begin": "\\{\\{", "end": "\\}\\}", "patterns": [ { "include": "source.js" } ], "beginCaptures": { "0": { "name": "punctuation.definition.action.begin.jison" } }, "endCaptures": { "0": { "name": "punctuation.definition.action.end.jison" } } }, { "name": "meta.action.jison", "begin": "(?=%\\{)", "end": "(?\u003c=%\\})", "patterns": [ { "include": "#user_code_blocks" } ] } ] }, "comments": { "patterns": [ { "name": "comment.line.double-slash.jison", "begin": "//", "end": "$", "beginCaptures": { "0": { "name": "punctuation.definition.comment.jison" } } }, { "name": "comment.block.jison", "begin": "/\\*", "end": "\\*/", "beginCaptures": { "0": { "name": "punctuation.definition.comment.begin.jison" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.end.jison" } } } ] }, "declarations_section": { "patterns": [ { "include": "#comments" }, { "begin": "^\\s*(%lex)\\s*$", "end": "^\\s*(/lex)\\b", "patterns": [ { "begin": "%%", "end": "(?=/lex)", "patterns": [ { "begin": "^%%", "end": "(?=/lex)", "patterns": [ { "name": "meta.section.user-code.jisonlex", "contentName": "source.js.embedded.jisonlex", "begin": "\\G", "end": "(?=/lex)", "patterns": [ { "include": "source.jisonlex#user_code_section" } ] } ], "beginCaptures": { "0": { "name": "meta.separator.section.jisonlex" } } }, { "name": "meta.section.rules.jisonlex", "begin": "\\G", "end": "^(?=%%|/lex)", "patterns": [ { "include": "source.jisonlex#rules_section" } ] } ], "beginCaptures": { "0": { "name": "meta.separator.section.jisonlex" } } }, { "name": "meta.section.definitions.jisonlex", "begin": "^", "end": "(?=%%|/lex)", "patterns": [ { "include": "source.jisonlex#definitions_section" } ] } ], "beginCaptures": { "1": { "name": "entity.name.tag.lexer.begin.jison" } }, "endCaptures": { "1": { "name": "entity.name.tag.lexer.end.jison" } } }, { "name": "meta.section.prologue.jison", "begin": "(?=%\\{)", "end": "(?\u003c=%\\})", "patterns": [ { "include": "#user_code_blocks" } ] }, { "include": "#options_declarations" }, { "name": "keyword.other.declaration.$1.jison", "match": "%(ebnf|left|nonassoc|parse-param|right|start)\\b" }, { "include": "#include_declarations" }, { "name": "meta.code.jison", "begin": "%(code)\\b", "end": "$", "patterns": [ { "include": "#comments" }, { "include": "#rule_actions" }, { "name": "keyword.other.code-qualifier.$1.jison", "match": "(init|required)" }, { "include": "#quoted_strings" }, { "name": "string.unquoted.jison", "match": "\\b[[:alpha:]_](?:[\\w-]*\\w)?\\b" } ], "beginCaptures": { "0": { "name": "keyword.other.declaration.$1.jison" } } }, { "name": "meta.parser-type.jison", "begin": "%(parser-type)\\b", "end": "$", "patterns": [ { "include": "#comments" }, { "include": "#quoted_strings" }, { "name": "string.unquoted.jison", "match": "\\b[[:alpha:]_](?:[\\w-]*\\w)?\\b" } ], "beginCaptures": { "0": { "name": "keyword.other.declaration.$1.jison" } } }, { "name": "meta.token.jison", "begin": "%(token)\\b", "end": "$|(%%|;)", "patterns": [ { "include": "#comments" }, { "include": "#numbers" }, { "include": "#quoted_strings" }, { "name": "invalid.unimplemented.jison", "match": "\u003c[[:alpha:]_](?:[\\w-]*\\w)?\u003e" }, { "name": "entity.other.token.jison", "match": "\\S+" } ], "beginCaptures": { "0": { "name": "keyword.other.declaration.$1.jison" } }, "endCaptures": { "1": { "name": "punctuation.terminator.declaration.token.jison" } } }, { "name": "keyword.other.declaration.$1.jison", "match": "%(debug|import)\\b" }, { "name": "invalid.illegal.jison", "match": "%prec\\b" }, { "name": "invalid.unimplemented.jison", "match": "%[[:alpha:]_](?:[\\w-]*\\w)?\\b" }, { "include": "#numbers" }, { "include": "#quoted_strings" } ] }, "epilogue_section": { "patterns": [ { "include": "#user_code_include_declarations" }, { "include": "source.js" } ] }, "include_declarations": { "patterns": [ { "name": "meta.include.jison", "begin": "(%(include))\\s*", "end": "(?\u003c=['\"])|(?=\\s)", "patterns": [ { "include": "#include_paths" } ], "beginCaptures": { "1": { "name": "keyword.other.declaration.$2.jison" } } } ] }, "include_paths": { "patterns": [ { "include": "#quoted_strings" }, { "name": "string.unquoted.jison", "begin": "(?=\\S)", "end": "(?=\\s)", "patterns": [ { "include": "source.js#string_escapes" } ] } ] }, "numbers": { "patterns": [ { "match": "(0[Xx])([0-9A-Fa-f]+)", "captures": { "1": { "name": "storage.type.number.jison" }, "2": { "name": "constant.numeric.integer.hexadecimal.jison" } } }, { "name": "constant.numeric.integer.decimal.jison", "match": "\\d+" } ] }, "options_declarations": { "patterns": [ { "name": "meta.options.jison", "begin": "%options\\b", "end": "^(?=\\S|\\s*$)", "patterns": [ { "include": "#comments" }, { "name": "entity.name.constant.jison", "match": "\\b[[:alpha:]_](?:[\\w-]*\\w)?\\b" }, { "begin": "(=)\\s*", "end": "(?\u003c=['\"])|(?=\\s)", "patterns": [ { "include": "#comments" }, { "name": "constant.language.boolean.$1.jison", "match": "\\b(true|false)\\b" }, { "include": "#numbers" }, { "include": "#quoted_strings" }, { "name": "string.unquoted.jison", "match": "\\S+" } ], "beginCaptures": { "1": { "name": "keyword.operator.option.assignment.jison" } } }, { "include": "#quoted_strings" } ], "beginCaptures": { "0": { "name": "keyword.other.options.jison" } } } ] }, "quoted_strings": { "patterns": [ { "name": "string.quoted.double.jison", "begin": "\"", "end": "\"", "patterns": [ { "include": "source.js#string_escapes" } ] }, { "name": "string.quoted.single.jison", "begin": "'", "end": "'", "patterns": [ { "include": "source.js#string_escapes" } ] } ] }, "rule_actions": { "patterns": [ { "include": "#actions" }, { "name": "meta.action.jison", "contentName": "source.js.embedded.jison", "begin": "\\{", "end": "\\}", "patterns": [ { "include": "source.js" } ], "beginCaptures": { "0": { "name": "punctuation.definition.action.begin.jison" } }, "endCaptures": { "0": { "name": "punctuation.definition.action.end.jison" } } }, { "include": "#include_declarations" }, { "name": "meta.action.jison", "contentName": "source.js.embedded.jison", "begin": "-\u003e|→", "end": "$", "patterns": [ { "include": "source.js" } ], "beginCaptures": { "0": { "name": "punctuation.definition.action.arrow.jison" } } } ] }, "rules_section": { "patterns": [ { "include": "#comments" }, { "include": "#actions" }, { "include": "#include_declarations" }, { "name": "meta.rule.jison", "begin": "\\b[[:alpha:]_](?:[\\w-]*\\w)?\\b", "end": ";", "patterns": [ { "include": "#comments" }, { "name": "meta.rule-components.jison", "begin": ":", "end": "(?=;)", "patterns": [ { "include": "#comments" }, { "include": "#quoted_strings" }, { "match": "(\\[)([[:alpha:]_](?:[\\w-]*\\w)?)(\\])", "captures": { "1": { "name": "punctuation.definition.named-reference.begin.jison" }, "2": { "name": "entity.name.other.reference.jison" }, "3": { "name": "punctuation.definition.named-reference.end.jison" } } }, { "name": "meta.prec.jison", "begin": "(%(prec))\\s*", "end": "(?\u003c=['\"])|(?=\\s)", "patterns": [ { "include": "#comments" }, { "include": "#quoted_strings" }, { "name": "constant.other.token.jison", "begin": "(?=\\S)", "end": "(?=\\s)" } ], "beginCaptures": { "1": { "name": "keyword.other.$2.jison" } } }, { "name": "keyword.operator.rule-components.separator.jison", "match": "\\|" }, { "name": "keyword.other.$0.jison", "match": "\\b(?:EOF|error)\\b" }, { "name": "keyword.other.empty.jison", "match": "(?:%(?:e(?:mpty|psilon))|\\b[Ɛɛεϵ])\\b" }, { "include": "#rule_actions" } ], "beginCaptures": { "0": { "name": "keyword.operator.rule-components.assignment.jison" } } } ], "beginCaptures": { "0": { "name": "entity.name.constant.rule-result.jison" } }, "endCaptures": { "0": { "name": "punctuation.terminator.rule.jison" } } } ] }, "user_code_blocks": { "patterns": [ { "name": "meta.user-code-block.jison", "contentName": "source.js.embedded.jison", "begin": "%\\{", "end": "%\\}", "patterns": [ { "include": "source.js" } ], "beginCaptures": { "0": { "name": "punctuation.definition.user-code-block.begin.jison" } }, "endCaptures": { "0": { "name": "punctuation.definition.user-code-block.end.jison" } } } ] }, "user_code_include_declarations": { "patterns": [ { "name": "meta.include.jison", "begin": "^(%(include))\\s*", "end": "(?\u003c=['\"])|(?=\\s)", "patterns": [ { "include": "#include_paths" } ], "beginCaptures": { "1": { "name": "keyword.other.declaration.$2.jison" } } } ] } }, "injections": { "L:(meta.action.jison - (comment | string)), source.js.embedded.jison": { "patterns": [ { "name": "variable.language.semantic-value.jison", "match": "\\${2}" }, { "name": "variable.language.result-location.jison", "match": "@\\$" }, { "name": "variable.language.stack-index-0.jison", "match": "##\\$|\\byysp\\b" }, { "name": "support.variable.token-reference.jison", "match": "#\\S+#" }, { "name": "variable.language.result-id.jison", "match": "#\\$" }, { "name": "support.variable.token-value.jison", "match": "\\$(?:-?\\d+|[[:alpha:]_](?:[\\w-]*\\w)?)" }, { "name": "support.variable.token-location.jison", "match": "@(?:-?\\d+|[[:alpha:]_](?:[\\w-]*\\w)?)" }, { "name": "support.variable.stack-index.jison", "match": "##(?:-?\\d+|[[:alpha:]_](?:[\\w-]*\\w)?)" }, { "name": "support.variable.token-id.jison", "match": "#(?:-?\\d+|[[:alpha:]_](?:[\\w-]*\\w)?)" }, { "name": "variable.language.jison", "match": "\\byy(?:l(?:eng|ineno|oc|stack)|rulelength|s(?:tate|s?tack)|text|vstack)\\b" }, { "name": "keyword.other.jison", "match": "\\byy(?:clearin|erro[kr])\\b" } ] } } }