{"name":"Grammarkdown","scopeName":"text.grammarkdown","patterns":[{"include":"#main"}],"repository":{"assertion":{"name":"meta.assertion.grammarkdown","begin":"\\[","end":"\\]","patterns":[{"include":"#assertion-empty"},{"include":"#assertion-lookahead"},{"include":"#assertion-no-symbol"},{"include":"#assertion-lexical-goal"},{"include":"#assertion-parameter"},{"include":"#assertion-prose"}],"beginCaptures":{"0":{"name":"punctuation.definition.assertion.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.assertion.end.grammarkdown"}}},"assertion-empty":{"match":"\\G\\s*(empty)(?:\\s+((?=\\S)[^\\]]*))?","captures":{"1":{"name":"keyword.operator.assertion.empty.grammarkdown"},"2":{"name":"invalid.illegal.unexpected-junk.grammarkdown"}}},"assertion-lexical-goal":{"begin":"\\G\\s*(lexical\\s+goal)(?=$|\\s)","end":"\\s*(?=$|\\])","patterns":[{"include":"#ref"}],"captures":{"1":{"name":"keyword.operator.assertion.lexical-goal.grammarkdown"}}},"assertion-lookahead":{"patterns":[{"name":"meta.lookahead-operation.grammarkdown","begin":"\\G\\s*(lookahead)\\s*(==|!=|≠)[ \\t]*","end":"(?!\\G)","patterns":[{"include":"#literal"}],"beginCaptures":{"1":{"name":"keyword.operator.assertion.lookahead.grammarkdown"},"2":{"name":"keyword.operator.comparison.equality.grammarkdown"}}},{"name":"meta.lookahead-operation.grammarkdown","begin":"\\G\\s*(lookahead)\\s*(\u003c-|\u003c!|∈|∉)[ \\t]*","end":"(?!\\G)","patterns":[{"name":"meta.string-set.grammarkdown","begin":"\\G{","end":"}","patterns":[{"include":"#literal"},{"include":"#comma"}],"beginCaptures":{"0":{"name":"punctuation.definition.set.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.set.end.grammarkdown"}}}],"beginCaptures":{"1":{"name":"keyword.operator.assertion.lookahead.grammarkdown"},"2":{"name":"keyword.operator.comparison.equality.grammarkdown"}}}]},"assertion-no-symbol":{"begin":"\\G\\s*(no)(?=$|\\s)","end":"((?\u003c=\\s)here)?\\s*(?=$|\\])","patterns":[{"include":"#ref"}],"captures":{"1":{"name":"keyword.operator.assertion.no-symbol-here.grammarkdown"}}},"assertion-parameter":{"match":"(?:^|\\G|(,))\\s*([+~?])\\s*(\\w+)","captures":{"1":{"patterns":[{"include":"#comma"}]},"2":{"name":"keyword.operator.parameter-test.grammarkdown"},"3":{"patterns":[{"include":"#ref"}]}}},"assertion-prose":{"name":"markup.quote.prose.grammarkdown","begin":"\\G\\s*(\u003e)[ \\t]*","end":"\\s*(?=\\])","beginCaptures":{"1":{"name":"punctuation.section.quote.grammarkdown"}}},"comma":{"name":"punctuation.delimiter.comma.grammarkdown","match":","},"comments":{"patterns":[{"name":"comment.line.double-slash.grammarkdown","begin":"//","end":"$","beginCaptures":{"0":{"name":"punctuation.definition.comment.grammarkdown"}}},{"name":"comment.block.grammarkdown","begin":"/\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.end.grammarkdown"}}}]},"exclusion":{"name":"meta.exclusion.grammarkdown","begin":"(?:^|\\G|(?\u003c=\\s))(but\\s+not)(?=$|\\s)","end":"(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))","patterns":[{"name":"keyword.operator.logical.or.grammarkdown","match":"(?\u003c=\\s)or(?=$|\\s)"},{"name":"keyword.operator.selection.one-of.grammarkdown","match":"(?\u003c=\\s)one\\s+of(?=$|\\s)"},{"include":"#production-innards"}],"beginCaptures":{"1":{"name":"keyword.operator.logical.negation.negate.not.grammarkdown"}}},"link-id":{"name":"meta.custom-permalink.grammarkdown","match":"(?:^|\\G)\\s*(\\w+)\\s*(\\[[^\\]]*\\])\\s*((#)([-\\w]+))","captures":{"1":{"name":"variable.language.production-reference.grammarkdown"},"2":{"patterns":[{"include":"#parameters"}]},"3":{"name":"constant.other.permalink.grammarkdown"},"4":{"name":"punctuation.definition.permalink.grammarkdown"},"5":{"name":"constant.other.reference.link.permalink.grammarkdown"}}},"literal":{"patterns":[{"name":"string.quoted.single.verbatim.grammarkdown","match":"(`)`(`)","captures":{"1":{"name":"punctuation.definition.string.begin.grammarkdown"},"2":{"name":"punctuation.definition.string.end.grammarkdown"}}},{"name":"string.quoted.verbatim.grammarkdown","begin":"`","end":"`","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.grammarkdown"}}}]},"main":{"patterns":[{"include":"#comments"},{"include":"#meta"},{"include":"#production"}]},"meta":{"patterns":[{"name":"meta.import.directive.grammarkdown","begin":"^\\s*((@)import)(?=$|\\s)[ \\t]*","end":"(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))","patterns":[{"include":"#meta-string"}],"beginCaptures":{"1":{"name":"keyword.control.import.grammarkdown"},"2":{"name":"punctuation.definition.keyword.grammarkdown"}}},{"name":"meta.source-line.directive.grammarkdown","begin":"^\\s*((@)line)(?=$|\\s)[ \\t]*","end":"(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))","patterns":[{"match":"\\G\\s*(\\d+)","captures":{"1":{"name":"constant.numeric.decimal.integer.line-number.grammarkdown"}}},{"include":"#meta-string"}],"beginCaptures":{"1":{"name":"keyword.control.line.grammarkdown"},"2":{"name":"punctuation.definition.keyword.grammarkdown"}}},{"name":"meta.define.directive.grammarkdown","begin":"^\\s*((@)define)(?=$|\\s)[ \\t]*","end":"(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))","patterns":[{"name":"variable.assignment.setting-name.grammarkdown","match":"\\G\\w+"},{"include":"#meta-value"}],"beginCaptures":{"1":{"name":"keyword.control.define.grammarkdown"},"2":{"name":"punctuation.definition.keyword.grammarkdown"}}}]},"meta-string":{"patterns":[{"name":"string.quoted.double.grammarkdown","begin":"\"","end":"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.grammarkdown"}}},{"name":"string.quoted.single.grammarkdown","begin":"'","end":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.grammarkdown"}}}]},"meta-value":{"patterns":[{"name":"constant.language.default.grammarkdown","match":"(?:^|\\G|(?\u003c=\\s))default(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))"},{"name":"constant.language.boolean.$1.grammarkdown","match":"(?:^|\\G|(?\u003c=\\s))(true|false)(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))"},{"name":"string.unquoted.setting-value.grammarkdown","match":"(?:^|\\G|(?\u003c=\\s))(?=\\S)(?:[^\\r\\n/]|/(?!/|\\*))++"}]},"one-of-list":{"name":"meta.one-of-list.grammarkdown","match":"\\G\\s*(one\\s+of)(?=$|\\s)[ \\t]*((?=\\S)(?:[^\\r\\n/]|/(?!/|\\*))++)?","captures":{"1":{"name":"keyword.operator.selection.one-of.grammarkdown"},"2":{"patterns":[{"include":"#terminal"}]}}},"optional":{"name":"keyword.operator.quantifier.optional.grammarkdown","match":"(?\u003c=\\S)\\s*\\?"},"parameters":{"name":"meta.parameters.list.grammarkdown","begin":"\\[","end":"\\]","patterns":[{"name":"variable.parameter.grammarkdown","match":"\\w+"},{"name":"keyword.operator.other.grammarkdown","match":"[\\?+~]"},{"include":"#comma"}],"beginCaptures":{"0":{"name":"punctuation.definition.list.begin.grammarkdown"}},"endCaptures":{"0":{"name":"punctuation.definition.list.end.grammarkdown"}}},"production":{"patterns":[{"name":"meta.production.indented.grammarkdown","begin":"(?:^|\\G)(\\s*)(\\w+)(?:\\s*(\\[[^\\]]*\\]))?\\s*(:{1,3})[ \\t]*(?:(one\\s+of)(?=$|\\s)\\s*)?[ \\t]*$","end":"(?i)(?=\\s*\u003c/emu-grammar\\s*\u003e)|^(?:(?=\\s*$)|(?!\\1[ \\t]+(?:[^\\s/]|/(?!/|\\*))))","patterns":[{"include":"#comments"},{"include":"#one-of-list"},{"include":"#production-innards"}],"beginCaptures":{"2":{"name":"entity.name.production.grammarkdown","patterns":[{"include":"#reserved"}]},"3":{"patterns":[{"include":"#parameters"}]},"4":{"name":"keyword.assignment.rule.grammarkdown"},"5":{"name":"keyword.operator.selection.one-of.grammarkdown"}}},{"name":"meta.production.single-line.grammarkdown","begin":"(?:^|\\G)\\s*(\\w+)(?:\\s*(\\[[^\\]]*\\]))?\\s*(:{1,3})[ \\t]*(?:(one\\s+of(?=$|\\s))\\s*)?(?=[^\\s/]|/(?!/|\\*))","end":"(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))","patterns":[{"include":"#one-of-list"},{"include":"#production-innards"}],"beginCaptures":{"1":{"name":"entity.name.production.grammarkdown","patterns":[{"include":"#reserved"}]},"2":{"patterns":[{"include":"#parameters"}]},"3":{"name":"keyword.assignment.rule.grammarkdown"},"4":{"name":"keyword.operator.selection.one-of.grammarkdown"}}}]},"production-innards":{"patterns":[{"include":"#prose"},{"include":"#exclusion"},{"include":"#unicode-range"},{"include":"#terminal"},{"include":"#optional"},{"include":"#link-id"},{"include":"#ref"}]},"prose":{"name":"markup.quote.prose.grammarkdown","begin":"(?:^|\\G)\\s*(\u003e)[ \\t]*","end":"(?=\\s*(?i:$|/[/*]|\u003c/emu-grammar\\s*\u003e))","beginCaptures":{"1":{"name":"punctuation.section.quote.grammarkdown"}}},"ref":{"name":"variable.reference.grammarkdown","match":"\\w+","captures":{"0":{"patterns":[{"include":"#reserved"}]}}},"reserved":{"name":"invalid.illegal.reserved-keyword.grammarkdown","match":"(?:^|\\G)(but|empty|goal|here|lexical|lookahead|not?|of|one|or)$"},"terminal":{"patterns":[{"include":"#assertion"},{"include":"#literal"},{"include":"#unicode-char"},{"include":"#unicode-codepoint"}]},"unicode-char":{"name":"constant.character.named.unicode-name.grammarkdown","match":"(\u003c)(?!/emu-grammar\\s*\u003e)[^\u003e]+(\u003e)","captures":{"1":{"name":"punctuation.definition.character.begin.grammarkdown"},"2":{"name":"punctuation.definition.character.end.grammarkdown"}}},"unicode-codepoint":{"name":"constant.numeric.other.codepoint.grammarkdown","match":"U\\+[A-Fa-f0-9]+"},"unicode-range":{"name":"meta.character-range.grammarkdown","match":"(?x)\n((\u003c[^\u003e]+\u003e) | (U\\+[A-Fa-f0-9]+))\n\\s+ (through) \\s+\n((\u003c[^\u003e]+\u003e) | (U\\+[A-Fa-f0-9]+))","captures":{"1":{"name":"meta.start-character.grammarkdown"},"2":{"patterns":[{"include":"#unicode-char"}]},"3":{"patterns":[{"include":"#unicode-codepoint"}]},"4":{"name":"keyword.operator.range.grammarkdown"},"5":{"name":"meta.end-character.grammarkdown"},"6":{"patterns":[{"include":"#unicode-char"}]},"7":{"patterns":[{"include":"#unicode-codepoint"}]}}}}}