   comments:
     patterns: [
       {
-        name: 'comment.line.double-slash.jison'
-        match: '//.*$'
-      }
-      {
-        contentName: 'comment.block.jison'
-        begin: '/\\*'
-        end: '\\*/'
+        name: "comment.line.double-slash.jison"
+        match: "//.*$"
+      }
+      {
+        contentName: "comment.block.jison"
+        begin: "/\\*"
+        end: "\\*/"
         captures:
           0:
-            name: 'punctuation.definition.comment.jison'
+            name: "punctuation.definition.comment.jison"
       }
     ]
   numbers:
     patterns: [
       {
-        match: '\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b'
-        name: 'constant.numeric.c'
+        match: "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
+        name: "constant.numeric.c"
       }
     ]
   block:
     patterns: [
       {
-        begin: '\\{'
+        begin: "\\{"
         beginCaptures:
           0:
-            name: 'punctuation.section.block.begin.c'
-        end: '\\}|(?=\\s*#\\s*endif\\b)'
-        endCaptures:
-          0:
-            name: 'punctuation.section.block.end.c'
-        name: 'meta.block.c'
-        patterns: [
-          {
-            include: 'source.js'
-          }
-        ]
-      }
-    ]
+            name: "punctuation.section.block.begin.c"
+        end: "\\}|(?=\\s*#\\s*endif\\b)"
+        endCaptures:
+          0:
+            name: "punctuation.section.block.end.c"
+        name: "meta.block.c"
+        patterns: [
+          {
+            include: "source.js"
+          }
+        ]
+      }
+    ]

  directives:
    patterns: [
      {
        match: '%[a-z\-]+'
        comment: 'Match %-directives'
        name: 'keyword.control.directive.jison'
      }
    ]
  symbols:
    patterns: [
      {
        match: '[a-zA-Z_.\-][a-zA-Z_.\-0-9]*'
        comment: 'Match valid symbols'
        name: 'variable.grammar-rule.token-type.jison'
      }
    ]
  types:
    patterns: [
      {
        begin: '<'
        end: '>'
        beginCaptures:
          0:
            name: 'punctuation.type-declaration.begin.jison'
        endCaptures:
          0:
            name: 'punctuation.type-declaration.end.jison'
        comment: 'Match type declarations'
        patterns: [
          {
            match: '[$a-zA-Z\_][$a-zA-Z0-9\_]*'
            comment: 'A valid JS identifier'
          }
        ]
      }

scopeName: "source.jison"
fileTypes: [
  "jison"
]
name: "Jison"
patterns: [
  {
    begin: "^(%%)$"                             # Has to be the first pattern
    comment: "Match from first %% symbol to EOF"
    captures:
      0:
        name: "meta.separator.section.jison"    # Match first %% symbol
    patterns: [
      {
        begin: "^(%%)$"                         # Has to be the first pattern
        comment: "Match from second %% symbol to EOF"
        captures:
          0:
            name: "meta.separator.section.jison"# Match second %% symbol
        patterns: [
          {
            include: "#exceeding_sections"      # Has to be the first pattern
          }
          {
            include: "#third_section"
          }
        ]
      }
      {
        include: "#second_section"
      }
    ]
  }
  {
    include: "#first_section"
  }
]
repository:
  first_section:
    patterns: [
      {
        begin: "(?!^%%$)"
        end: "(?=^%%$)"
        comment: "Match the content of the first section"
        name: "meta.section.first.jison"
        patterns: [
          {
            include: "#prologue"
          }
          {
            include: "#declarations"
          }
          {
            include: "#comments"
            comment: "jison supports Javascript comments"
          }
        ]
      }
