[
  [
    {
      "type": "comment.line.double-slash",
      "value": "// ContractDefinition = ( 'contract' | 'library' | 'interface' ) Identifier"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "//                      ( 'is' InheritanceSpecifier (',' InheritanceSpecifier )* )?"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "//                      '{' ContractPart* '}'"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "EmptyOneLiner"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    },
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// https://en.wikipedia.org/wiki/Indentation_style#Variant:_1TBS_(OTBS)"
    }
  ],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "EmptyOneTrueBraceStyle"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// https://en.wikipedia.org/wiki/Indentation_style#Allman_style"
    }
  ],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "EmptyAllmanBraceStyle"
    }
  ],
  [
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "library"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Alexandria"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "interface"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "OECD"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Inheriting"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.inheritance",
      "value": "is"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Inheritable"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "MultipleInheritance"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.inheritance",
      "value": "is"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Awesome"
    },
    {
      "type": "punctuation.operator",
      "value": ","
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Multiple"
    },
    {
      "type": "punctuation.operator",
      "value": ","
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Inheritable"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// (see https://solidity.readthedocs.io/en/develop/contracts.html#libraries )"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// Restrictions for libraries in comparison to contracts:"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// - No state variables"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// - Cannot inherit nor be inherited"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// - Cannot receive Ether"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// (These might be lifted at a later point.)"
    }
  ],
  [
    {
      "type": "storage.type",
      "value": "library"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "BetterBeenDecentralized"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.inheritance",
      "value": "is"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Alexandria"
    },
    {
      "type": "punctuation.operator",
      "value": ","
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Ashurbanipal"
    },
    {
      "type": "punctuation.operator",
      "value": ","
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Aksum"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// constructor (not in grammar.txt)"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// But see https://solidity.readthedocs.io/en/develop/contracts.html#constructors"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// Also see following inheritance section for base constructors as \"modifiers\" for"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// the current constructor."
    }
  ],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Constructed"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "storage.type",
      "value": "bytes32"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "name"
    },
    {
      "type": "punctuation.operator",
      "value": ";"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "storage.type",
      "value": "constructor"
    },
    {
      "type": "paren.lparen",
      "value": "("
    },
    {
      "type": "storage.type",
      "value": "bytes32"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_name"
    },
    {
      "type": "paren.rparen",
      "value": ")"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.visibility",
      "value": "public"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "text",
      "value": "    "
    },
    {
      "type": "identifier",
      "value": "name"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "keyword.operator",
      "value": "="
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_name"
    },
    {
      "type": "punctuation.operator",
      "value": ";"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// InheritanceSpecifier = UserDefinedTypeName ( '(' Expression ( ',' Expression )* ')' )?"
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// The above expression(s) ^^ is/are a way to specify arguments for base contructors."
    }
  ],
  [
    {
      "type": "comment.line.double-slash",
      "value": "// See https://solidity.readthedocs.io/en/develop/contracts.html#arguments-for-base-constructors"
    }
  ],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Base"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "storage.type",
      "value": "uint"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "x"
    },
    {
      "type": "punctuation.operator",
      "value": ";"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "storage.type",
      "value": "constructor"
    },
    {
      "type": "paren.lparen",
      "value": "("
    },
    {
      "type": "storage.type",
      "value": "uint"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_x"
    },
    {
      "type": "paren.rparen",
      "value": ")"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.visibility",
      "value": "public"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "x"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "keyword.operator",
      "value": "="
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_x"
    },
    {
      "type": "punctuation.operator",
      "value": ";"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Derived1"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.inheritance",
      "value": "is"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Base"
    },
    {
      "type": "paren.lparen",
      "value": "("
    },
    {
      "type": "constant.numeric",
      "value": "7"
    },
    {
      "type": "paren.rparen",
      "value": ")"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "storage.type",
      "value": "constructor"
    },
    {
      "type": "paren.lparen",
      "value": "("
    },
    {
      "type": "storage.type",
      "value": "uint"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_y"
    },
    {
      "type": "paren.rparen",
      "value": ")"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.visibility",
      "value": "public"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    },
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [],
  [
    {
      "type": "storage.type",
      "value": "contract"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Derived2"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.inheritance",
      "value": "is"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Base"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    }
  ],
  [
    {
      "type": "text",
      "value": "  "
    },
    {
      "type": "storage.type",
      "value": "constructor"
    },
    {
      "type": "paren.lparen",
      "value": "("
    },
    {
      "type": "storage.type",
      "value": "uint"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_y"
    },
    {
      "type": "paren.rparen",
      "value": ")"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "Base"
    },
    {
      "type": "paren.lparen",
      "value": "("
    },
    {
      "type": "identifier",
      "value": "_y"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "keyword.operator",
      "value": "*"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "identifier",
      "value": "_y"
    },
    {
      "type": "paren.rparen",
      "value": ")"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "storage.modifier.visibility",
      "value": "public"
    },
    {
      "type": "text",
      "value": " "
    },
    {
      "type": "paren.lparen",
      "value": "{"
    },
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  [
    {
      "type": "paren.rparen",
      "value": "}"
    }
  ],
  []
]
