anchor.diff:      http://heycam.github.io/webidl/
   
       Web IDL (Second Edition)
  -    W3C Editor's Draft 17 November 2015
  +    Editor’s Draft, 3 May 2021
    */
   grammar WebIDL;
   
  
positive.code: ;
  
  interfaceMember
  	: const_
  	| operation
  	| serializer
  	| stringifier
  	| staticMember
  	| iterable
  	| readonlyMember
  	| readWriteAttribute
  	| readWriteMaplike
  	| readWriteSetlike
  ;
  
  dictionary
  	: 'dictionary' IDENTIFIER_WEBIDL inheritance '{' dictionaryMembers '}' ';'
  ;
  
  dictionaryMembers
  	: extendedAttributeList dictionaryMember dictionaryMembers
  	| /* empty */
  ;
  
  dictionaryMember
  	: required_ type_ IDENTIFIER_WEBIDL default_ ';'
  ;
  
  required_
  	: 'required'
  	| /* empty */
  ;
  
  partialDictionary
  	: 'dictionary' IDENTIFIER_WEBIDL '{' dictionaryMembers '}' ';'
  ;
  
  default_
  	: '=' defaultValue
  	| /* empty */
  ;
  
  defaultValue
  	: constValue
  	| STRING_WEBIDL
  	| '[' ']'
  ;
  
  inheritance
  	: ':' IDENTIFIER_WEBIDL
  	| /* empty */
  ;
  
  extension_
      : 'extends' IDENTIFIER_WEBIDL
      | /* empty */
  ;
  
  enum_
  	: 'enum' IDENTIFIER_WEBIDL '{' enumValueList '}' ';'
  ;
  
  enumValueList
  	: STRING_WEBIDL enumValueListComma
  ;
  
  enumValueListComma
  	: ',' enumValueListString
  	| /* empty */
  ;
  
  enumValueListString
  	: STRING_WEBIDL enumValueListComma
  	| /* empty */
  ;
  
  callbackRest
  	: IDENTIFIER_WEBIDL '=' returnType '(' argumentList ')' ';'
  ;
  
  typedef_
  	: 'typedef' type_ IDENTIFIER_WEBIDL ';'
  ;
  
  implementsStatement
  	: IDENTIFIER_WEBIDL 'implements' IDENTIFIER_WEBIDL ';'
  ;
  
  const_
  	: 'const' constType IDENTIFIER_WEBIDL '=' constValue ';'
  ;
  
  constValue
  	: booleanLiteral
  	| floatLiteral
  	| INTEGER_WEBIDL
  	| 'null'
  ;
  
  booleanLiteral
  	: 'true'
  	| 'false'
  ;
  
  floatLiteral
  	: FLOAT_WEBIDL
  	| '-Infinity'
  	| 'Infinity'
  	| 'NaN'
  ;
  
  serializer
  	: 'serializer' serializerRest
  ;
  
  serializerRest
  	: operationRest
  	| '=' serializationPattern ';'
  	| ';'
  ;
  
  serializationPattern
  	: '{' serializationPatternMap '}'
  	| '[' serializationPatternList ']'
  	| IDENTIFIER_WEBIDL
  ;
  
  serializationPatternMap
  	: 'getter'
  	| 'inherit' identifiers
  	| IDENTIFIER_WEBIDL identifiers
  	| /* empty */
  ;
  
  serializationPatternList
  	: 'getter'
  	| IDENTIFIER_WEBIDL identifiers
  	| /* empty */
  ;
  
  stringifier
  	: 'stringifier' stringifierRest
  ;
  
  stringifierRest
  	: readOnly attributeRest
  	| returnType operationRest
  	| ';'
  ;
  
  staticMember
  	: 'static' staticMemberRest
  ;
  
  staticMemberRest
  	: readOnly attributeRest
  	| returnType operationRest
  ;
  
  readonlyMember
  	: 'readonly' readonlyMemberRest
  ;
  
  readonlyMemberRest
  	: attributeRest
  	| readWriteMaplike
  	| readWriteSetlike
  ;
  
  readWriteAttribute
  	: 'inherit' readOnly attributeRest
  	| attributeRest
  ;
  
  attributeRest
  	: 'attribute' type_ attributeName ';'
  ;
  
  attributeName
  	: attributeNameKeyword
  	| IDENTIFIER_WEBIDL
  ;
  
  attributeNameKeyword
  	: 'required'
  ;
  
  inherit
  	: 'inherit'
  	| /* empty */
  ;
  
  readOnly
  	: 'readonly'
  	| /* empty */
  ;
  
  operation
  	: returnType operationRest
  	| specialOperation
  ;
  
  specialOperation
  	: special specials returnType operationRest
  ;
  
  specials
  	: special specials
  	| /* empty */
  ;
  
  special
  	: 'getter'
  	| 'setter'
  	| 'deleter'
  	| 'legacycaller'
  ;
  
  operationRest
  	: optionalIdentifier '(' argumentList ')' ';'
  ;
  
  optionalIdentifier
  	: IDENTIFIER_WEBIDL
  	| /* empty */
  ;
  
  argumentList
  
negative.code: 	: IDENTIFIER_WEBIDL '=' IDENTIFIER_WEBIDL '(' argumentList ')'
  ;
  
  INTEGER_WEBIDL
  	: '-'?('0'([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)
  ;
  
  DECIMAL_WEBIDL
  	: '-'?(([0-9]+'.'[0-9]*|[0-9]*'.'[0-9]+)([Ee][+\-]?[0-9]+)?|[0-9]+[Ee][+\-]?[0-9]+)
  ;
  
  IDENTIFIER_WEBIDL
  	: [_-]?[A-Z_a-z][0-9A-Z_a-z]*
  ;
  
  STRING_WEBIDL
  