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