IDL >>>
dictionary CSSFontFaceLoadEventInit : EventInit { sequence<CSSFontFaceRule> fontfaces = [ ]; };
interface Simple{
    serializer;
    serializer = { foo };
    serializer cereal(short one);
    iterable<Foo>;
    iterable<Foo, Bar>;
    async iterable<Foo>;
    async iterable<Foo, Bar>;
    async iterable<Foo, Bar>();
    async iterable<Foo, Bar>(DOMString name);
    readonly maplike<Foo, Bar>;
    setlike<Uint8ClampedArray>;
    attribute boolean required;
    static attribute Foo foo;
    static Foo foo();
    Promise<ReallyISwear>? theCheckIsInTheMail();
}; // this is a comment éß
interface Multi : One  ,  Two   ,   Three     {
        attribute short one;
};
typedef sequence<Foo[]>? fooType;
typedef (short or Foo) maybeFoo;
typedef sequence<(short or Foo)> maybeFoos;
typedef FrozenArray<(short or Foo)> frozenMaybeFoos;
typedef ObservableArray<(short or Foo)> observableMaybeFoos;
typedef record<DOMString, Foo[]>? recordFoo;
typedef record<DOMString, (short or Foo)>? recordMaybeFoo;
typedef record<USVString, any> recordAny;
typedef record<any, any> recordBroken;
interface foo {
  [one] attribute Foo one;
  [two] Foo two()bar;
  [three] const Foo three = 3}}foo
typedef   short    shorttype  = error this is;

   const  long    long   one=   2   ;
   const long hex = 0xabcdef09;
   const long octal = 0777;
   const double reallyHigh = Infinity;
   const double reallyLow = -Infinity;
   const double notANumber = NaN;
   const double invalid = - Infinity;
 Window   implements     WindowInterface  ; // more comment

enum   foo    {"one"  ,    "two",    }     ;
enum foo { "one" };
enum bar{"one","two","three",}; // and another
enum comments {
"one", //comment one
       // more comment
"two", //comment two
"three"  , //coment three
};

 typedef  short shorttype;
typedef long longtype;
typedef long long longtype;
[hello, my name is inigo montøya (you ] killed my father)] typedef unsigned long long inigo;
typedef unrestricted double dubloons;
typedef short [ ] shortarray;
typedef DOMString string;
typedef DOMString[] stringarray;
typedef foo barType;
typedef foo [ ] [ ]  barTypes;
typedef sequence<DOMString[]> sequins;
typedef sequence<DOMString[]>? sequinses;
typedef object obj;
typedef (short or [Extended] double) union;
typedef (short or sequence < DOMString [ ] ? [ ] > ? or DOMString[]?[] or unsigned long long or unrestricted double) craziness;
typedef (short or (long or double)) nestedUnion;
typedef (short or (long or double) or long long) moreNested;
typedef (short or sequence<(DOMString[]?[] or short)>? or DOMString[]?[]) sequenceUnion;

[ Constructor , LegacyFactoryFunction = MyConstructor, Constructor (Foo one), LegacyFactoryFunction = MyOtherConstructor (Foo two , long long longest ) ] partial interface Foo: Bar {
    unsigned long long method(short x, unsigned long long y, optional double inf = Infinity, sequence<Foo>... fooArg) raises (hell);
    unsigned long long method(DOMString string, optional Foo foo = {});
    undefined abort();
    undefined anotherMethod(short round);
    [ha!] attribute short bar getraises (an, exception);
    const short fortyTwo = 42;
    attribute long async;
    long foo(long x, long y, long async);
    undefined bar(any constructor);
    long includes();
}
[ LegacyNoInterfaceObject , MapClass (short, Foo )] interface LinkStyle {
    constructor();
    constructor(int x);
    stringifier attribute DOMString mediaText;
    readonly attribute [Extended] short bar ;
    getter object (DOMString name);
    getter setter object bob (DOMString name);
    stringifier foo me(int x);
    stringifier foo ();
    stringifier;
    stringifier attribute short string;
    this is a syntax error, naturally
};
[foo] partial dictionary FooDict:BarDict {
    [one "]" ( tricky ] test)] short bar;
    [two] sequence<(double or [Extended] Foo)> foo = "hello";
    required Foo baz;
}

callback callFoo = short();
callback callFoo2 = unsigned long long(unrestricted double one, DOMString two, Fubar ... three);
callback interface callMe {
    inherit attribute short round setraises (for the heck of it);
};
callback interface mixin callMeMixin {
    long method();
};

[Exposed=(Window, Worker)] dictionary MyDictionary {
    any value = null;
    any[] value = null;
    any [] value = null;
};

[] interface _interface {
    readonly attribute long? service;
    readonly attribute ArrayBuffer? value;
    readonly attribute ArrayBuffer value2;
    attribute ArrayBuffer? value3;
};

namespace Namespace1 {
    [One] unsigned long long method([Extended] short x);
    [Two] unsigned long long method(short x, short y);
    readonly attribute long? value;
    attribute long error;   // error, must be readonly
    const short fortyTwo = 42;
};
partial namespace Namespace2 {
    [One] unsigned long long method(short x);
    [Two] unsigned long long method(short x, short y);
};

interface System {
  object createObject(DOMString _interface);
  sequence<object> getObjects(DOMString interface);
  getter DOMString (DOMString keyName);
  DOMString? lookupPrefix(DOMString? namespace);
};

interface OptionalTest {
  long methodWithOptionalDict(long one, (long or MyDictionary or object) optionalDict);    // should error
  long methodWithOptionalDict(long one, MyDictionary optionalDict, optional long three);    // should error
  long methodWithRequiredDict(long one, FooDict requiredDict);
  long methodWithRequiredDict(long one, FooDict requiredDict, long three);
};

interface Interface {
  attribute long hello;
};

interface mixin Mixin {
  const double constantMember = 10.0;
  readonly attribute long readOnlyAttributeMember;
  attribute long attributeMember;
  DOMString? operationMember(long argument);
  stringifier;
};

Interface includes Mixin;

[LegacyNoInterfaceObject] Interface includes Mixin;

interface mixin MixinCanNotIncludeSpecialOperation {
  getter long (unsigned long argument);
};

interface mixin MixinCanNotIncludeStaticMember {
  static readonly attribute long staticReadOnlyAttributeMember;
};

interface mixin MixinCanNotIncludeIterable {
  iterable<long>;
};

interface mixin MixinCanNotIncludeMaplike {
  readonly maplike<DOMString, DOMString>;
};

interface mixin MixinCanNotIncludeSetlike {
  readonly setlike<DOMString>;
};

interface Underscores {
  attribute DOMString _or;
  boolean _includes(DOMString value);
};
interface BigNumbers {
  const bigint biiig = 42;
};

<<<
IDL SYNTAX ERROR LINE: 3 - skipped: "serializer"

IDL SYNTAX ERROR LINE: 4 - skipped: "serializer = { foo }"

IGNORED LEGACY IDL LINE: 19 - "  ,  Two   ,   Three     "

IDL SYNTAX ERROR LINE: 30 - skipped: "typedef record<any, any> recordBroken"

IDL SYNTAX ERROR LINE: 33 - expected ";" skipped: "bar"

IDL SYNTAX ERROR LINE: 34 - expected ";" 

IDL SYNTAX ERROR LINE: 34 - expected ";" 

IDL SYNTAX ERROR LINE: 34 - skipped: "}"

IDL SYNTAX ERROR LINE: 34 - skipped: "foo
typedef   short    shorttype  = error this is"

IDL SYNTAX ERROR LINE: 43 - skipped: "const double invalid = - Infinity"

IGNORED LEGACY IDL LINE: 76 - "raises (hell)"

IGNORED LEGACY IDL LINE: 80 - "getraises (an, exception)"

IDL SYNTAX ERROR LINE: 87 - expected ";" 

IDL SYNTAX ERROR LINE: 98 - skipped: "this is a syntax error, naturally
"

IDL SYNTAX ERROR LINE: 106 - expected ";" 

IGNORED LEGACY IDL LINE: 109 - "setraises (for the heck of it)"

IDL SYNTAX ERROR LINE: 132 - skipped: "attribute long error"

IDL ERROR LINE: 148 - Dictionary argument "optionalDict" without required members must be marked optional

IDL ERROR LINE: 149 - Dictionary argument "optionalDict" without required members must be marked optional

IDL SYNTAX ERROR LINE: 168 - skipped: "[LegacyNoInterfaceObject] Interface includes Mixin"

IDL SYNTAX ERROR LINE: 171 - skipped: "getter long (unsigned long argument)"

IDL SYNTAX ERROR LINE: 175 - skipped: "static readonly attribute long staticReadOnlyAttributeMember"

IDL SYNTAX ERROR LINE: 179 - skipped: "iterable<long>"

IDL SYNTAX ERROR LINE: 183 - skipped: "readonly maplike<DOMString, DOMString>"

IDL SYNTAX ERROR LINE: 187 - skipped: "readonly setlike<DOMString>"

[Parser: [Dictionary: [name: CSSFontFaceLoadEventInit] [Inheritance: EventInit][members: 
  [DictionaryMember: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: CSSFontFaceRule]]]]]] [name: fontfaces] = [default: [Default: '[]']]]
]]
[Interface: [name: Simple] [members: 
  [Unknown:  tokens: [identifier:serializer][symbol:;]]
  [Unknown:  tokens: [identifier:serializer][whitespace: ][symbol:=][whitespace: ][symbol:{][whitespace: ][identifier:foo][whitespace: ][symbol:}][symbol:;]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: serializer]]] [OperationRest: [name: [OperationName: cereal]] [ArgumentList: [Argument: [type: short ] [name: [ArgumentName: one]]]]]]]
  [Member: [Iterable: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]]]]
  [Member: [Iterable: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Bar]]]]]
  [Member: [AsyncIterable: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]]]]
  [Member: [AsyncIterable: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Bar]]]]]
  [Member: [AsyncIterable: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Bar]]]]]
  [Member: [AsyncIterable: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Bar]]][Argument: [type: DOMString ] [name: [ArgumentName: name]]]]]
  [Member: [Maplike: [readonly] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Bar]]]]]
  [Member: [Setlike: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Uint8ClampedArray]]]]]
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: boolean]]]] [name: required]]]]
  [Member: [StaticMember: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [name: foo]]]]
  [Member: [StaticMember: [Type: [SingleType: [NonAnyType: Foo]]] [OperationRest: [name: [OperationName: foo]] [ArgumentList: ]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [Promise] [Type: [SingleType: [NonAnyType: ReallyISwear]]][null]]]] [OperationRest: [name: [OperationName: theCheckIsInTheMail]] [ArgumentList: ]]]]
]]
[Interface: [name: Multi] [Inheritance: One][members: 
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: one]]]]
]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo[TypeSuffix: [array] ]]]][null]]]] [name: fooType]]
[Typedef: [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: Foo]]]] [name: maybeFoo]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: Foo]]]]]]] [name: maybeFoos]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [FrozenArray] [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: Foo]]]]]]] [name: frozenMaybeFoos]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [ObservableArray] [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: Foo]]]]]]] [name: observableMaybeFoos]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [record] [StringType: DOMString] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo[TypeSuffix: [array] ]]]][null]]]] [name: recordFoo]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [record] [StringType: DOMString] [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: Foo]]]][null]]]] [name: recordMaybeFoo]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [record] [StringType: USVString] [TypeWithExtendedAttributes: [SingleType: [AnyType: ]]]]]] [name: recordAny]]
[Unknown:  tokens: [symbol:typedef][whitespace: ][symbol:record][symbol:<][symbol:any][symbol:,][whitespace: ][symbol:any][symbol:>][whitespace: ][identifier:recordBroken][symbol:;]]
[Interface: [name: foo] [members: 
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: one]] [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [name: one]]]]
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: two]] [Operation: [Type: [SingleType: [NonAnyType: Foo]]] [OperationRest: [name: [OperationName: two]] [ArgumentList: ]]]]
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: three]] [Const: [ConstType: Foo][name: three] = [value: 3]]]
]]
[Unknown:  tokens: [symbol:}]]
[Unknown:  tokens: [identifier:foo][whitespace:
][symbol:typedef][whitespace:   ][symbol:short][whitespace:    ][identifier:shorttype][whitespace:  ][symbol:=][whitespace: ][identifier:error][whitespace: ][identifier:this][whitespace: ][identifier:is][symbol:;]]
[Const: [ConstType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long long]]]][name: one] = [value: 2   ]]
[Const: [ConstType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]][name: hex] = [value: 0xabcdef09]]
[Const: [ConstType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]][name: octal] = [value: 0777]]
[Const: [ConstType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]][name: reallyHigh] = [value: Infinity]]
[Const: [ConstType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]][name: reallyLow] = [value: -Infinity]]
[Const: [ConstType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]][name: notANumber] = [value: NaN]]
[Unknown:  tokens: [symbol:const][whitespace: ][symbol:double][whitespace: ][identifier:invalid][whitespace: ][symbol:=][whitespace: ][symbol:-][whitespace: ][symbol:Infinity][symbol:;]]
[Implements: [name: Window] [Implements: WindowInterface]]
[Enum: [name: foo] [values: [EnumValueList: [EnumValue: "one"][EnumValue: "two"]]]]
[Enum: [name: foo] [values: [EnumValueList: [EnumValue: "one"]]]]
[Enum: [name: bar] [values: [EnumValueList: [EnumValue: "one"][EnumValue: "two"][EnumValue: "three"]]]]
[Enum: [name: comments] [values: [EnumValueList: [EnumValue: "one"][EnumValue: "two"][EnumValue: "three"]]]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: shorttype]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [name: longtype]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long long]]]]]] [name: longtype]]
[Typedef: [ExtendedAttributes: [ExtendedAttributeNoArgs: hello] [ExtendedAttribute: [identifier:my][whitespace: ][identifier:name][whitespace: ][identifier:is][whitespace: ][identifier:inigo][whitespace: ][identifier:mont][other:ø][identifier:ya][whitespace: ][symbol:(][identifier:you][whitespace: ][symbol:]][whitespace: ][identifier:killed][whitespace: ][identifier:my][whitespace: ][identifier:father][symbol:)]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [name: inigo]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnrestrictedFloatType: [unrestricted][FloatType: double]]]]]] [name: dubloons]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]][TypeSuffix: [array] ]]]] [name: shortarray]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString]]] [name: string]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString[TypeSuffix: [array] ]]]] [name: stringarray]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: foo]]] [name: barType]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: foo[TypeSuffix: [array] [TypeSuffix: [array] ]]]]] [name: barTypes]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString[TypeSuffix: [array] ]]]]]]] [name: sequins]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString[TypeSuffix: [array] ]]]][null]]]] [name: sequinses]]
[Typedef: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: object]]] [name: obj]]
[Typedef: [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]]]]] [name: union]]
[Typedef: [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString[TypeSuffix: [array] [TypeSuffix: [null] [TypeSuffixStartingWithArray: ]]]]]][null]]][UnionMemberType: [NonAnyType: DOMString[TypeSuffix: [array] [TypeSuffix: [null] [TypeSuffixStartingWithArray: ]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnrestrictedFloatType: [unrestricted][FloatType: double]]]]]]] [name: craziness]]
[Typedef: [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]]]]]]] [name: nestedUnion]]
[Typedef: [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long long]]]]]]] [name: moreNested]]
[Typedef: [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]][UnionMemberType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: DOMString[TypeSuffix: [array] [TypeSuffix: [null] [TypeSuffixStartingWithArray: ]]]]][UnionMemberType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]]][null]]][UnionMemberType: [NonAnyType: DOMString[TypeSuffix: [array] [TypeSuffix: [null] [TypeSuffixStartingWithArray: ]]]]]]] [name: sequenceUnion]]
[Interface: [ExtendedAttributes: [ExtendedAttributeNoArgs: Constructor] [ExtendedAttributeIdent: LegacyFactoryFunction [value: MyConstructor]] [ExtendedAttributeArgList: Constructor [arguments: [Argument: [type: Foo ] [name: [ArgumentName: one]]]]] [ExtendedAttributeNamedArgList: LegacyFactoryFunction [value: MyOtherConstructor] [arguments: [Argument: [type: Foo ] [name: [ArgumentName: two]]] [Argument: [type: long long ] [name: [ArgumentName: longest]]]]]] [partial] [name: Foo] [Inheritance: Bar][members: 
  [ExtendedAttributeNoArgs: Constructor]
  [ExtendedAttributeIdent: LegacyFactoryFunction [value: MyConstructor]]
  [ExtendedAttributeArgList: Constructor [arguments: [Argument: [type: Foo ] [name: [ArgumentName: one]]]]]
  [ExtendedAttributeNamedArgList: LegacyFactoryFunction [value: MyOtherConstructor] [arguments: [Argument: [type: Foo ] [name: [ArgumentName: two]]] [Argument: [type: long long ] [name: [ArgumentName: longest]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: [Argument: [type: short ] [name: [ArgumentName: x]]] [Argument: [type: unsigned long long ] [name: [ArgumentName: y]]] [Argument: [optional] [type: double ] [name: [ArgumentName: inf]] [default: [Default: 'Infinity']]] [Argument: [type: sequence<Foo>][...] [name: [ArgumentName: fooArg]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: string]]] [Argument: [optional] [type: Foo ] [name: [ArgumentName: foo]] [default: [Default: '{}']]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: undefined]]]] [OperationRest: [name: [OperationName: abort]] [ArgumentList: ]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: undefined]]]] [OperationRest: [name: [OperationName: anotherMethod]] [ArgumentList: [Argument: [type: short ] [name: [ArgumentName: round]]]]]]]
  [Member: [ExtendedAttributes: [ExtendedAttribute: [identifier:ha][other:!]]] [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: bar]]]]
  [Member: [Const: [ConstType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]][name: fortyTwo] = [value: 42]]]
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [name: async]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: foo]] [ArgumentList: [Argument: [type: long ] [name: [ArgumentName: x]]] [Argument: [type: long ] [name: [ArgumentName: y]]] [Argument: [type: long ] [name: [ArgumentName: async]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: undefined]]]] [OperationRest: [name: [OperationName: bar]] [ArgumentList: [Argument: [type: any ] [name: [ArgumentName: constructor]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: includes]] [ArgumentList: ]]]]
]]
[Interface: [ExtendedAttributes: [ExtendedAttributeNoArgs: LegacyNoInterfaceObject] [ExtendedAttributeTypePair: MapClass [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [Type: [SingleType: [NonAnyType: Foo]]]]] [name: LinkStyle] [members: 
  [Member: [Constructor: [ArgumentList: ]]]
  [Member: [Constructor: [ArgumentList: [Argument: [type: int ] [name: [ArgumentName: x]]]]]]
  [Member: [Stringifier: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString]]] [name: mediaText]]]]
  [Member: [Attribute: [AttributeRest: [readonly] [TypeWithExtendedAttributes: [ExtendedAttributes: [ExtendedAttributeNoArgs: Extended]] [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: bar]]]]
  [Member: [SpecialOperation: [Special: getter] [Type: [SingleType: [NonAnyType: object]]] [OperationRest: [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: name]]]]]]]
  [Member: [SpecialOperation: [Special: getter] [Special: setter] [Type: [SingleType: [NonAnyType: object]]] [OperationRest: [name: [OperationName: bob]] [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: name]]]]]]]
  [Member: [Stringifier: [Type: [SingleType: [NonAnyType: foo]]] [OperationRest: [name: [OperationName: me]] [ArgumentList: [Argument: [type: int ] [name: [ArgumentName: x]]]]]]]
  [Member: [Stringifier: [Type: [SingleType: [NonAnyType: foo]]] [OperationRest: [ArgumentList: ]]]]
  [Member: [Stringifier: ]]
  [Member: [Stringifier: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: string]]]]
  [Unknown:  tokens: [identifier:this][whitespace: ][identifier:is][whitespace: ][identifier:a][whitespace: ][identifier:syntax][whitespace: ][identifier:error][symbol:,][whitespace: ][identifier:naturally][whitespace:
]]
]]
[Dictionary: [ExtendedAttributes: [ExtendedAttributeNoArgs: foo]] [partial] [name: FooDict] [Inheritance: BarDict][members: 
  [DictionaryMember: [ExtendedAttributes: [ExtendedAttribute: [identifier:one][whitespace: ][string:"]"][whitespace: ][symbol:(][whitespace: ][identifier:tricky][whitespace: ][symbol:]][whitespace: ][identifier:test][symbol:)]]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: bar]]
  [DictionaryMember: [ExtendedAttributes: [ExtendedAttributeNoArgs: two]] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [UnionType: [UnionMemberType: [NonAnyType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]]][UnionMemberType: [NonAnyType: Foo]]]]]]] [name: foo] = [default: [Default: '"hello"']]]
  [DictionaryMember: [required] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: Foo]]] [name: baz]]
]]
[Callback: [name: callFoo] [return_type: short] [ArgumentList: ]]
[Callback: [name: callFoo2] [return_type: unsigned long long] [ArgumentList: [Argument: [type: unrestricted double ] [name: [ArgumentName: one]]] [Argument: [type: DOMString ] [name: [ArgumentName: two]]] [Argument: [type: Fubar ][...] [name: [ArgumentName: three]]]]]
[Callback: [Interface: [name: callMe] [members: 
  [Member: [Attribute: [inherit] [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]]]] [name: round]]]]
]]]
[Callback: [Interface: [mixin] [name: callMeMixin] [members: 
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: ]]]]
]]]
[Dictionary: [ExtendedAttributes: [ExtendedAttributeIdentList: Exposed [value: Window] Worker]] [name: MyDictionary] [members: 
  [DictionaryMember: [TypeWithExtendedAttributes: [SingleType: [AnyType: ]]] [name: value] = [default: [Default: 'null']]]
  [DictionaryMember: [TypeWithExtendedAttributes: [SingleType: [AnyType: [TypeSuffixStartingWithArray: ]]]] [name: value] = [default: [Default: 'null']]]
  [DictionaryMember: [TypeWithExtendedAttributes: [SingleType: [AnyType: [TypeSuffixStartingWithArray: ]]]] [name: value] = [default: [Default: 'null']]]
]]
[Interface: [ExtendedAttributes: [ExtendedAttribute: ]] [name: _interface] [members: 
  [Member: [Attribute: [AttributeRest: [readonly] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]][TypeSuffix: [null] ]]]] [name: service]]]]
  [Member: [Attribute: [AttributeRest: [readonly] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: ArrayBuffer[null]]]] [name: value]]]]
  [Member: [Attribute: [AttributeRest: [readonly] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: ArrayBuffer]]] [name: value2]]]]
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: ArrayBuffer[null]]]] [name: value3]]]]
]]
[Namespace: [name: Namespace1] [members: 
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: One]] [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: [Argument: [ExtendedAttributes: [ExtendedAttributeNoArgs: Extended]] [type: short ] [name: [ArgumentName: x]]]]]]]
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: Two]] [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: [Argument: [type: short ] [name: [ArgumentName: x]]] [Argument: [type: short ] [name: [ArgumentName: y]]]]]]]
  [Member: [Attribute: [AttributeRest: [readonly] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]][TypeSuffix: [null] ]]]] [name: value]]]]
  [Unknown:  tokens: [symbol:attribute][whitespace: ][symbol:long][whitespace: ][identifier:error][symbol:;]]
  [Member: [Const: [ConstType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: short]]]][name: fortyTwo] = [value: 42]]]
]]
[Namespace: [partial] [name: Namespace2] [members: 
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: One]] [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: [Argument: [type: short ] [name: [ArgumentName: x]]]]]]]
  [Member: [ExtendedAttributes: [ExtendedAttributeNoArgs: Two]] [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [unsigned][IntegerType: long long]]]]]] [OperationRest: [name: [OperationName: method]] [ArgumentList: [Argument: [type: short ] [name: [ArgumentName: x]]] [Argument: [type: short ] [name: [ArgumentName: y]]]]]]]
]]
[Interface: [name: System] [members: 
  [Member: [Operation: [Type: [SingleType: [NonAnyType: object]]] [OperationRest: [name: [OperationName: createObject]] [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: _interface]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [sequence] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: object]]]]]] [OperationRest: [name: [OperationName: getObjects]] [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: interface]]]]]]]
  [Member: [SpecialOperation: [Special: getter] [Type: [SingleType: [NonAnyType: DOMString]]] [OperationRest: [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: keyName]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: DOMString[TypeSuffix: [null] ]]]] [OperationRest: [name: [OperationName: lookupPrefix]] [ArgumentList: [Argument: [type: DOMString? ] [name: [ArgumentName: namespace]]]]]]]
]]
[Interface: [name: OptionalTest] [members: 
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: methodWithOptionalDict]] [ArgumentList: [Argument: [type: long ] [name: [ArgumentName: one]]] [Argument: [type: (long or MyDictionary or object) ] [name: [ArgumentName: optionalDict]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: methodWithOptionalDict]] [ArgumentList: [Argument: [type: long ] [name: [ArgumentName: one]]] [Argument: [type: MyDictionary ] [name: [ArgumentName: optionalDict]]] [Argument: [optional] [type: long ] [name: [ArgumentName: three]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: methodWithRequiredDict]] [ArgumentList: [Argument: [type: long ] [name: [ArgumentName: one]]] [Argument: [type: FooDict ] [name: [ArgumentName: requiredDict]]]]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [OperationRest: [name: [OperationName: methodWithRequiredDict]] [ArgumentList: [Argument: [type: long ] [name: [ArgumentName: one]]] [Argument: [type: FooDict ] [name: [ArgumentName: requiredDict]]] [Argument: [type: long ] [name: [ArgumentName: three]]]]]]]
]]
[Interface: [name: Interface] [members: 
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [name: hello]]]]
]]
[Interface: [mixin] [name: Mixin] [members: 
  [Member: [Const: [ConstType: [PrimitiveType: [UnrestrictedFloatType: [FloatType: double]]]][name: constantMember] = [value: 10.0]]]
  [Member: [Attribute: [AttributeRest: [readonly] [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [name: readOnlyAttributeMember]]]]
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: [PrimitiveType: [UnsignedIntegerType: [IntegerType: long]]]]]] [name: attributeMember]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: DOMString[TypeSuffix: [null] ]]]] [OperationRest: [name: [OperationName: operationMember]] [ArgumentList: [Argument: [type: long ] [name: [ArgumentName: argument]]]]]]]
  [Member: [Stringifier: ]]
]]
[Includes: [name: Interface] [Includes: Mixin]]
[Unknown:  tokens: [symbol:[][identifier:LegacyNoInterfaceObject][symbol:]][whitespace: ][identifier:Interface][whitespace: ][symbol:includes][whitespace: ][identifier:Mixin][symbol:;]]
[Interface: [mixin] [name: MixinCanNotIncludeSpecialOperation] [members: 
  [Unknown:  tokens: [symbol:getter][whitespace: ][symbol:long][whitespace: ][symbol:(][symbol:unsigned][whitespace: ][symbol:long][whitespace: ][identifier:argument][symbol:)][symbol:;]]
]]
[Interface: [mixin] [name: MixinCanNotIncludeStaticMember] [members: 
  [Unknown:  tokens: [symbol:static][whitespace: ][symbol:readonly][whitespace: ][symbol:attribute][whitespace: ][symbol:long][whitespace: ][identifier:staticReadOnlyAttributeMember][symbol:;]]
]]
[Interface: [mixin] [name: MixinCanNotIncludeIterable] [members: 
  [Unknown:  tokens: [symbol:iterable][symbol:<][symbol:long][symbol:>][symbol:;]]
]]
[Interface: [mixin] [name: MixinCanNotIncludeMaplike] [members: 
  [Unknown:  tokens: [symbol:readonly][whitespace: ][symbol:maplike][symbol:<][symbol:DOMString][symbol:,][whitespace: ][symbol:DOMString][symbol:>][symbol:;]]
]]
[Interface: [mixin] [name: MixinCanNotIncludeSetlike] [members: 
  [Unknown:  tokens: [symbol:readonly][whitespace: ][symbol:setlike][symbol:<][symbol:DOMString][symbol:>][symbol:;]]
]]
[Interface: [name: Underscores] [members: 
  [Member: [Attribute: [AttributeRest: [TypeWithExtendedAttributes: [SingleType: [NonAnyType: DOMString]]] [name: or]]]]
  [Member: [Operation: [Type: [SingleType: [NonAnyType: [PrimitiveType: boolean]]]] [OperationRest: [name: [OperationName: _includes]] [ArgumentList: [Argument: [type: DOMString ] [name: [ArgumentName: value]]]]]]]
]]
[Interface: [name: BigNumbers] [members: 
  [Member: [Const: [ConstType: [PrimitiveType: bigint]][name: biiig] = [value: 42]]]
]]
]
MARKED UP:
<c dictionary><k>dictionary</k> <n>CSSFontFaceLoadEventInit</n> : <tn>EventInit</tn> { <c dict-member><t><k>sequence</k>&lt;<t><tn>CSSFontFaceRule</tn></t>&gt;</t> <n>fontfaces</n> = [ ];</c> };</c>
<c interface><k>interface</k> <n>Simple</n>{
    <c unknown>serializer;</c>
    <c unknown>serializer = { foo };</c>
    <c method><t><tn>serializer</tn></t> <n>cereal</n>(<c argument><t><p><k>short</k></p></t> <n>one</n></c>);</c>
    <c iterable><k>iterable</k>&lt;<t><tn>Foo</tn></t>&gt;;</c>
    <c iterable><k>iterable</k>&lt;<t><tn>Foo</tn></t>, <t><tn>Bar</tn></t>&gt;;</c>
    <c async-iterable><k>async</k> <k>iterable</k>&lt;<t><tn>Foo</tn></t>&gt;;</c>
    <c async-iterable><k>async</k> <k>iterable</k>&lt;<t><tn>Foo</tn></t>, <t><tn>Bar</tn></t>&gt;;</c>
    <c async-iterable><k>async</k> <k>iterable</k>&lt;<t><tn>Foo</tn></t>, <t><tn>Bar</tn></t>&gt;();</c>
    <c async-iterable><k>async</k> <k>iterable</k>&lt;<t><tn>Foo</tn></t>, <t><tn>Bar</tn></t>&gt;(<c argument><t><s><k>DOMString</k></s></t> <n>name</n></c>);</c>
    <c maplike><k>readonly</k> <k>maplike</k>&lt;<t><tn>Foo</tn></t>, <t><tn>Bar</tn></t>&gt;;</c>
    <c setlike><k>setlike</k>&lt;<t><b><k>Uint8ClampedArray</k></b></t>&gt;;</c>
    <c attribute><k>attribute</k> <t><p><k>boolean</k></p></t> <n>required</n>;</c>
    <c attribute><k>static</k> <k>attribute</k> <t><tn>Foo</tn></t> <n>foo</n>;</c>
    <c method><k>static</k> <t><tn>Foo</tn></t> <n>foo</n>();</c>
    <c method><t><k>Promise</k>&lt;<t><tn>ReallyISwear</tn></t>&gt;?</t> <n>theCheckIsInTheMail</n>();</c>
};</c> // this is a comment éß
<c interface><k>interface</k> <n>Multi</n> : <tn>One</tn>  ,  <tn>Two</tn>   ,   <tn>Three</tn>     {
        <c attribute><k>attribute</k> <t><p><k>short</k></p></t> <n>one</n>;</c>
};</c>
<c typedef><k>typedef</k> <t><k>sequence</k>&lt;<t><tn>Foo</tn>[]</t>&gt;?</t> <n>fooType</n>;</c>
<c typedef><k>typedef</k> <t>(<t><p><k>short</k></p></t> <k>or</k> <t><tn>Foo</tn></t>)</t> <n>maybeFoo</n>;</c>
<c typedef><k>typedef</k> <t><k>sequence</k>&lt;<t>(<t><p><k>short</k></p></t> <k>or</k> <t><tn>Foo</tn></t>)</t>&gt;</t> <n>maybeFoos</n>;</c>
<c typedef><k>typedef</k> <t><k>FrozenArray</k>&lt;<t>(<t><p><k>short</k></p></t> <k>or</k> <t><tn>Foo</tn></t>)</t>&gt;</t> <n>frozenMaybeFoos</n>;</c>
<c typedef><k>typedef</k> <t><k>ObservableArray</k>&lt;<t>(<t><p><k>short</k></p></t> <k>or</k> <t><tn>Foo</tn></t>)</t>&gt;</t> <n>observableMaybeFoos</n>;</c>
<c typedef><k>typedef</k> <t><k>record</k>&lt;<s><k>DOMString</k></s>, <tn>Foo</tn>[]&gt;?</t> <n>recordFoo</n>;</c>
<c typedef><k>typedef</k> <t><k>record</k>&lt;<s><k>DOMString</k></s>, (<t><p><k>short</k></p></t> <k>or</k> <t><tn>Foo</tn></t>)&gt;?</t> <n>recordMaybeFoo</n>;</c>
<c typedef><k>typedef</k> <t><k>record</k>&lt;<s><k>USVString</k></s>, <k>any</k>&gt;</t> <n>recordAny</n>;</c>
<c unknown>typedef record&lt;any, any&gt; recordBroken;</c>
<c interface><k>interface</k> <n>foo</n> {
  <c attribute>[<c extended-attribute><n>one</n></c>] <k>attribute</k> <t><tn>Foo</tn></t> <n>one</n>;</c>
  <c method>[<c extended-attribute><n>two</n></c>] <t><tn>Foo</tn></t> <n>two</n>()bar;</c>
  <c const>[<c extended-attribute><n>three</n></c>] <k>const</k> <t><tn>Foo</tn></t> <n>three</n> = 3</c>}</c><c unknown>}</c><c unknown>foo
typedef   short    shorttype  = error this is;</c>

   <c const><k>const</k>  <t><p><k>long</k>    <k>long</k></p></t>   <n>one</n>=   2   ;</c>
   <c const><k>const</k> <t><p><k>long</k></p></t> <n>hex</n> = 0xabcdef09;</c>
   <c const><k>const</k> <t><p><k>long</k></p></t> <n>octal</n> = 0777;</c>
   <c const><k>const</k> <t><p><k>double</k></p></t> <n>reallyHigh</n> = <k>Infinity</k>;</c>
   <c const><k>const</k> <t><p><k>double</k></p></t> <n>reallyLow</n> = <k>-Infinity</k>;</c>
   <c const><k>const</k> <t><p><k>double</k></p></t> <n>notANumber</n> = <k>NaN</k>;</c>
   <c unknown>const double invalid = - Infinity;</c>
 <c implements><tn>Window</tn>   <k>implements</k>     <tn>WindowInterface</tn>  ;</c> // more comment

<c enum><k>enum</k>   <n>foo</n>    {<ev>"one"</ev>  ,    <ev>"two"</ev>,    }     ;</c>
<c enum><k>enum</k> <n>foo</n> { <ev>"one"</ev> };</c>
<c enum><k>enum</k> <n>bar</n>{<ev>"one"</ev>,<ev>"two"</ev>,<ev>"three"</ev>,};</c> // and another
<c enum><k>enum</k> <n>comments</n> {
<ev>"one"</ev>, //comment one
       // more comment
<ev>"two"</ev>, //comment two
<ev>"three"</ev>  , //coment three
};</c>

 <c typedef><k>typedef</k>  <t><p><k>short</k></p></t> <n>shorttype</n>;</c>
<c typedef><k>typedef</k> <t><p><k>long</k></p></t> <n>longtype</n>;</c>
<c typedef><k>typedef</k> <t><p><k>long</k> <k>long</k></p></t> <n>longtype</n>;</c>
<c typedef>[<c extended-attribute><n>hello</n></c>, <c extended-attribute>my name is inigo montøya (you ] killed my father)</c>] <k>typedef</k> <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>inigo</n>;</c>
<c typedef><k>typedef</k> <t><p><k>unrestricted</k> <k>double</k></p></t> <n>dubloons</n>;</c>
<c typedef><k>typedef</k> <t><p><k>short</k></p> [ ]</t> <n>shortarray</n>;</c>
<c typedef><k>typedef</k> <t><s><k>DOMString</k></s></t> <n>string</n>;</c>
<c typedef><k>typedef</k> <t><s><k>DOMString</k></s>[]</t> <n>stringarray</n>;</c>
<c typedef><k>typedef</k> <t><tn>foo</tn></t> <n>barType</n>;</c>
<c typedef><k>typedef</k> <t><tn>foo</tn> [ ] [ ]</t>  <n>barTypes</n>;</c>
<c typedef><k>typedef</k> <t><k>sequence</k>&lt;<t><s><k>DOMString</k></s>[]</t>&gt;</t> <n>sequins</n>;</c>
<c typedef><k>typedef</k> <t><k>sequence</k>&lt;<t><s><k>DOMString</k></s>[]</t>&gt;?</t> <n>sequinses</n>;</c>
<c typedef><k>typedef</k> <t><o><k>object</k></o></t> <n>obj</n>;</c>
<c typedef><k>typedef</k> <t>(<t><p><k>short</k></p></t> <k>or</k> <t>[<c extended-attribute><n>Extended</n></c>] <p><k>double</k></p></t>)</t> <n>union</n>;</c>
<c typedef><k>typedef</k> <t>(<t><p><k>short</k></p></t> <k>or</k> <t><k>sequence</k> &lt; <t><s><k>DOMString</k></s> [ ] ? [ ]</t> &gt; ?</t> <k>or</k> <t><s><k>DOMString</k></s>[]?[]</t> <k>or</k> <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <k>or</k> <t><p><k>unrestricted</k> <k>double</k></p></t>)</t> <n>craziness</n>;</c>
<c typedef><k>typedef</k> <t>(<t><p><k>short</k></p></t> <k>or</k> <t>(<t><p><k>long</k></p></t> <k>or</k> <t><p><k>double</k></p></t>)</t>)</t> <n>nestedUnion</n>;</c>
<c typedef><k>typedef</k> <t>(<t><p><k>short</k></p></t> <k>or</k> <t>(<t><p><k>long</k></p></t> <k>or</k> <t><p><k>double</k></p></t>)</t> <k>or</k> <t><p><k>long</k> <k>long</k></p></t>)</t> <n>moreNested</n>;</c>
<c typedef><k>typedef</k> <t>(<t><p><k>short</k></p></t> <k>or</k> <t><k>sequence</k>&lt;<t>(<t><s><k>DOMString</k></s>[]?[]</t> <k>or</k> <t><p><k>short</k></p></t>)</t>&gt;?</t> <k>or</k> <t><s><k>DOMString</k></s>[]?[]</t>)</t> <n>sequenceUnion</n>;</c>

<c interface>[ <c constructor><n>Constructor</n></c> , <c constructor><n>LegacyFactoryFunction</n> = <tn>MyConstructor</tn></c>, <c constructor><n>Constructor</n> (<c argument><t><tn>Foo</tn></t> <n>one</n></c>)</c>, <c constructor><n>LegacyFactoryFunction</n> = <tn>MyOtherConstructor</tn> (<c argument><t><tn>Foo</tn></t> <n>two</n> </c>, <c argument><t><p><k>long</k> <k>long</k></p></t> <n>longest</n> </c>) </c>] <k>partial</k> <k>interface</k> <n>Foo</n>: <tn>Bar</tn> {
    <c method><t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument><t><p><k>short</k></p></t> <n>x</n></c>, <c argument><t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>y</n></c>, <c argument><k>optional</k> <t><p><k>double</k></p></t> <n>inf</n> = <k>Infinity</k></c>, <c argument><t><k>sequence</k>&lt;<t><tn>Foo</tn></t>&gt;</t>... <n>fooArg</n></c>) raises (hell);</c>
    <c method><t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument><t><s><k>DOMString</k></s></t> <n>string</n></c>, <c argument><k>optional</k> <t><tn>Foo</tn></t> <n>foo</n> = {}</c>);</c>
    <c method><t><p><k>undefined</k></p></t> <n>abort</n>();</c>
    <c method><t><p><k>undefined</k></p></t> <n>anotherMethod</n>(<c argument><t><p><k>short</k></p></t> <n>round</n></c>);</c>
    <c attribute>[<c extended-attribute>ha!</c>] <k>attribute</k> <t><p><k>short</k></p></t> <n>bar</n> getraises (an, exception);</c>
    <c const><k>const</k> <t><p><k>short</k></p></t> <n>fortyTwo</n> = 42;</c>
    <c attribute><k>attribute</k> <t><p><k>long</k></p></t> <n>async</n>;</c>
    <c method><t><p><k>long</k></p></t> <n>foo</n>(<c argument><t><p><k>long</k></p></t> <n>x</n></c>, <c argument><t><p><k>long</k></p></t> <n>y</n></c>, <c argument><t><p><k>long</k></p></t> <n>async</n></c>);</c>
    <c method><t><p><k>undefined</k></p></t> <n>bar</n>(<c argument><t><k>any</k></t> <n>constructor</n></c>);</c>
    <c method><t><p><k>long</k></p></t> <n>includes</n>();</c>
}
</c><c interface>[ <c extended-attribute><n>LegacyNoInterfaceObject</n></c> , <c extended-attribute><n>MapClass</n> (<p><k>short</k></p>, <tn>Foo</tn> )</c>] <k>interface</k> <n>LinkStyle</n> {
    <c method><n>constructor</n>();</c>
    <c method><n>constructor</n>(<c argument><t><tn>int</tn></t> <n>x</n></c>);</c>
    <c attribute><k>stringifier</k> <k>attribute</k> <t><s><k>DOMString</k></s></t> <n>mediaText</n>;</c>
    <c attribute><k>readonly</k> <k>attribute</k> <t>[<c extended-attribute><n>Extended</n></c>] <p><k>short</k></p></t> <n>bar</n> ;</c>
    <c method><k>getter</k> <t><o><k>object</k></o></t> (<c argument><t><s><k>DOMString</k></s></t> <n>name</n></c>);</c>
    <c method><k>getter</k> <k>setter</k> <t><o><k>object</k></o></t> <n>bob</n> (<c argument><t><s><k>DOMString</k></s></t> <n>name</n></c>);</c>
    <c stringifier><k>stringifier</k> <t><tn>foo</tn></t> <n>me</n>(<c argument><t><tn>int</tn></t> <n>x</n></c>);</c>
    <c stringifier><k>stringifier</k> <t><tn>foo</tn></t> ();</c>
    <c stringifier><k>stringifier</k>;</c>
    <c attribute><k>stringifier</k> <k>attribute</k> <t><p><k>short</k></p></t> <n>string</n>;</c>
    <c unknown>this is a syntax error, naturally
</c>};</c>
<c dictionary>[<c extended-attribute><n>foo</n></c>] <k>partial</k> <k>dictionary</k> <n>FooDict</n>:<tn>BarDict</tn> {
    <c dict-member>[<c extended-attribute>one "]" ( tricky ] test)</c>] <t><p><k>short</k></p></t> <n>bar</n>;</c>
    <c dict-member>[<c extended-attribute><n>two</n></c>] <t><k>sequence</k>&lt;<t>(<t><p><k>double</k></p></t> <k>or</k> <t>[<c extended-attribute><n>Extended</n></c>] <tn>Foo</tn></t>)</t>&gt;</t> <n>foo</n> = "hello";</c>
    <c dict-member><k>required</k> <t><tn>Foo</tn></t> <n>baz</n>;</c>
}

</c><c callback><k>callback</k> <n>callFoo</n> = <t><p><k>short</k></p></t>();</c>
<c callback><k>callback</k> <n>callFoo2</n> = <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t>(<c argument><t><p><k>unrestricted</k> <k>double</k></p></t> <n>one</n></c>, <c argument><t><s><k>DOMString</k></s></t> <n>two</n></c>, <c argument><t><tn>Fubar</tn></t> ... <n>three</n></c>);</c>
<c callback><k>callback</k> <k>interface</k> <n>callMe</n> {
    <c attribute><k>inherit</k> <k>attribute</k> <t><p><k>short</k></p></t> <n>round</n> setraises (for the heck of it);</c>
};</c>
<c callback><k>callback</k> <k>interface</k> <k>mixin</k> <n>callMeMixin</n> {
    <c method><t><p><k>long</k></p></t> <n>method</n>();</c>
};</c>

<c dictionary>[<c extended-attribute><n>Exposed</n>=(<tn>Window</tn>, <tn>Worker</tn>)</c>] <k>dictionary</k> <n>MyDictionary</n> {
    <c dict-member><t><k>any</k></t> <n>value</n> = <k>null</k>;</c>
    <c dict-member><t><k>any</k>[]</t> <n>value</n> = <k>null</k>;</c>
    <c dict-member><t><k>any</k> []</t> <n>value</n> = <k>null</k>;</c>
};</c>

<c interface>[<c extended-attribute></c>] <k>interface</k> <n>_interface</n> {
    <c attribute><k>readonly</k> <k>attribute</k> <t><p><k>long</k></p>?</t> <n>service</n>;</c>
    <c attribute><k>readonly</k> <k>attribute</k> <t><b><k>ArrayBuffer</k></b>?</t> <n>value</n>;</c>
    <c attribute><k>readonly</k> <k>attribute</k> <t><b><k>ArrayBuffer</k></b></t> <n>value2</n>;</c>
    <c attribute><k>attribute</k> <t><b><k>ArrayBuffer</k></b>?</t> <n>value3</n>;</c>
};</c>

<c namespace><k>namespace</k> <n>Namespace1</n> {
    <c method>[<c extended-attribute><n>One</n></c>] <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument>[<c extended-attribute><n>Extended</n></c>] <t><p><k>short</k></p></t> <n>x</n></c>);</c>
    <c method>[<c extended-attribute><n>Two</n></c>] <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument><t><p><k>short</k></p></t> <n>x</n></c>, <c argument><t><p><k>short</k></p></t> <n>y</n></c>);</c>
    <c attribute><k>readonly</k> <k>attribute</k> <t><p><k>long</k></p>?</t> <n>value</n>;</c>
    <c unknown>attribute long error;</c>   // error, must be readonly
    <c const><k>const</k> <t><p><k>short</k></p></t> <n>fortyTwo</n> = 42;</c>
};</c>
<c namespace><k>partial</k> <k>namespace</k> <n>Namespace2</n> {
    <c method>[<c extended-attribute><n>One</n></c>] <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument><t><p><k>short</k></p></t> <n>x</n></c>);</c>
    <c method>[<c extended-attribute><n>Two</n></c>] <t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument><t><p><k>short</k></p></t> <n>x</n></c>, <c argument><t><p><k>short</k></p></t> <n>y</n></c>);</c>
};</c>

<c interface><k>interface</k> <n>System</n> {
  <c method><t><o><k>object</k></o></t> <n>createObject</n>(<c argument><t><s><k>DOMString</k></s></t> <n>_interface</n></c>);</c>
  <c method><t><k>sequence</k>&lt;<t><o><k>object</k></o></t>&gt;</t> <n>getObjects</n>(<c argument><t><s><k>DOMString</k></s></t> <n>interface</n></c>);</c>
  <c method><k>getter</k> <t><s><k>DOMString</k></s></t> (<c argument><t><s><k>DOMString</k></s></t> <n>keyName</n></c>);</c>
  <c method><t><s><k>DOMString</k></s>?</t> <n>lookupPrefix</n>(<c argument><t><s><k>DOMString</k></s>?</t> <n>namespace</n></c>);</c>
};</c>

<c interface><k>interface</k> <n>OptionalTest</n> {
  <c method><t><p><k>long</k></p></t> <n>methodWithOptionalDict</n>(<c argument><t><p><k>long</k></p></t> <n>one</n></c>, <c argument><t>(<t><p><k>long</k></p></t> <k>or</k> <t><tn>MyDictionary</tn></t> <k>or</k> <t><o><k>object</k></o></t>)</t> <n>optionalDict</n></c>);</c>    // should error
  <c method><t><p><k>long</k></p></t> <n>methodWithOptionalDict</n>(<c argument><t><p><k>long</k></p></t> <n>one</n></c>, <c argument><t><tn>MyDictionary</tn></t> <n>optionalDict</n></c>, <c argument><k>optional</k> <t><p><k>long</k></p></t> <n>three</n></c>);</c>    // should error
  <c method><t><p><k>long</k></p></t> <n>methodWithRequiredDict</n>(<c argument><t><p><k>long</k></p></t> <n>one</n></c>, <c argument><t><tn>FooDict</tn></t> <n>requiredDict</n></c>);</c>
  <c method><t><p><k>long</k></p></t> <n>methodWithRequiredDict</n>(<c argument><t><p><k>long</k></p></t> <n>one</n></c>, <c argument><t><tn>FooDict</tn></t> <n>requiredDict</n></c>, <c argument><t><p><k>long</k></p></t> <n>three</n></c>);</c>
};</c>

<c interface><k>interface</k> <n>Interface</n> {
  <c attribute><k>attribute</k> <t><p><k>long</k></p></t> <n>hello</n>;</c>
};</c>

<c interface><k>interface</k> <k>mixin</k> <n>Mixin</n> {
  <c const><k>const</k> <t><p><k>double</k></p></t> <n>constantMember</n> = 10.0;</c>
  <c attribute><k>readonly</k> <k>attribute</k> <t><p><k>long</k></p></t> <n>readOnlyAttributeMember</n>;</c>
  <c attribute><k>attribute</k> <t><p><k>long</k></p></t> <n>attributeMember</n>;</c>
  <c method><t><s><k>DOMString</k></s>?</t> <n>operationMember</n>(<c argument><t><p><k>long</k></p></t> <n>argument</n></c>);</c>
  <c stringifier><k>stringifier</k>;</c>
};</c>

<c includes><tn>Interface</tn> <k>includes</k> <tn>Mixin</tn>;</c>

<c unknown>[LegacyNoInterfaceObject] Interface includes Mixin;</c>

<c interface><k>interface</k> <k>mixin</k> <n>MixinCanNotIncludeSpecialOperation</n> {
  <c unknown>getter long (unsigned long argument);</c>
};</c>

<c interface><k>interface</k> <k>mixin</k> <n>MixinCanNotIncludeStaticMember</n> {
  <c unknown>static readonly attribute long staticReadOnlyAttributeMember;</c>
};</c>

<c interface><k>interface</k> <k>mixin</k> <n>MixinCanNotIncludeIterable</n> {
  <c unknown>iterable&lt;long&gt;;</c>
};</c>

<c interface><k>interface</k> <k>mixin</k> <n>MixinCanNotIncludeMaplike</n> {
  <c unknown>readonly maplike&lt;DOMString, DOMString&gt;;</c>
};</c>

<c interface><k>interface</k> <k>mixin</k> <n>MixinCanNotIncludeSetlike</n> {
  <c unknown>readonly setlike&lt;DOMString&gt;;</c>
};</c>

<c interface><k>interface</k> <n>Underscores</n> {
  <c attribute><k>attribute</k> <t><s><k>DOMString</k></s></t> <n>_or</n>;</c>
  <c method><t><p><k>boolean</k></p></t> <n>_includes</n>(<c argument><t><s><k>DOMString</k></s></t> <n>value</n></c>);</c>
};</c>
<c interface><k>interface</k> <n>BigNumbers</n> {
  <c const><k>const</k> <t><p><k>bigint</k></p></t> <n>biiig</n> = 42;</c>
};</c>

Complexity: 149
dictionary: CSSFontFaceLoadEventInit
    dict-member: fontfaces (fontfaces)
interface: Simple
    unknown: None (None)
    unknown: None (None)
    method: cereal(one) (cereal)
    iterable: __iterable__ (__iterable__)
    iterable: __iterable__ (__iterable__)
    async-iterable: __async_iterable__ (__async_iterable__)
    async-iterable: __async_iterable__ (__async_iterable__)
    async-iterable: __async_iterable__ (__async_iterable__)
    async-iterable: __async_iterable__ (__async_iterable__)
    maplike: __maplike__ (__maplike__)
    setlike: __setlike__ (__setlike__)
    attribute: required (required)
    attribute: foo (foo)
    method: foo() (foo)
    method: theCheckIsInTheMail() (theCheckIsInTheMail)
interface: Multi
    attribute: one (one)
typedef: fooType
typedef: maybeFoo
typedef: maybeFoos
typedef: frozenMaybeFoos
typedef: observableMaybeFoos
typedef: recordFoo
typedef: recordMaybeFoo
typedef: recordAny
unknown: None
interface: foo
    attribute: one (one)
    method: two() (two)
    const: three (three)
unknown: None
unknown: None
const: one
const: hex
const: octal
const: reallyHigh
const: reallyLow
const: notANumber
unknown: None
implements: Window
enum: foo
enum: foo
enum: bar
enum: comments
typedef: shorttype
typedef: longtype
typedef: longtype
typedef: inigo
typedef: dubloons
typedef: shortarray
typedef: string
typedef: stringarray
typedef: barType
typedef: barTypes
typedef: sequins
typedef: sequinses
typedef: obj
typedef: union
typedef: craziness
typedef: nestedUnion
typedef: moreNested
typedef: sequenceUnion
interface: Foo
    constructor: Foo() (Foo)
    constructor: MyConstructor() (MyConstructor)
    constructor: Foo(one) (Foo)
    constructor: MyOtherConstructor(two, longest) (MyOtherConstructor)
    method: method(x, y, inf, ...fooArg) (method)
    method: method(string, foo) (method)
    method: abort() (abort)
    method: anotherMethod(round) (anotherMethod)
    attribute: bar (bar)
    const: fortyTwo (fortyTwo)
    attribute: async (async)
    method: foo(x, y, async) (foo)
    method: bar(constructor) (bar)
    method: includes() (includes)
interface: LinkStyle
    method: constructor() (constructor)
    method: constructor(x) (constructor)
    attribute: mediaText (mediaText)
    attribute: bar (bar)
    method: __getter__(name) (__getter__)
    method: bob(name) (bob)
    stringifier: me(x) (me)
    stringifier: __stringifier__() (__stringifier__)
    stringifier: __stringifier__ (__stringifier__)
    attribute: string (string)
    unknown: None (None)
dictionary: FooDict
    dict-member: bar (bar)
    dict-member: foo (foo)
    dict-member: baz (baz)
callback: callFoo
callback: callFoo2
callback: callMe
    attribute: round (round)
callback: callMeMixin
    method: method() (method)
dictionary: MyDictionary
    dict-member: value (value)
    dict-member: value (value)
    dict-member: value (value)
interface: interface
    attribute: service (service)
    attribute: value (value)
    attribute: value2 (value2)
    attribute: value3 (value3)
namespace: Namespace1
    method: method(x) (method)
    method: method(x, y) (method)
    attribute: value (value)
    unknown: None (None)
    const: fortyTwo (fortyTwo)
namespace: Namespace2
    method: method(x) (method)
    method: method(x, y) (method)
interface: System
    method: createObject(interface) (createObject)
    method: getObjects(interface) (getObjects)
    method: __getter__(keyName) (__getter__)
    method: lookupPrefix(namespace) (lookupPrefix)
interface: OptionalTest
    method: methodWithOptionalDict(one, optionalDict) (methodWithOptionalDict)
    method: methodWithOptionalDict(one, optionalDict, three) (methodWithOptionalDict)
    method: methodWithRequiredDict(one, requiredDict) (methodWithRequiredDict)
    method: methodWithRequiredDict(one, requiredDict, three) (methodWithRequiredDict)
interface: Interface
    attribute: hello (hello)
interface: Mixin
    const: constantMember (constantMember)
    attribute: readOnlyAttributeMember (readOnlyAttributeMember)
    attribute: attributeMember (attributeMember)
    method: operationMember(argument) (operationMember)
    stringifier: __stringifier__ (__stringifier__)
includes: Interface
unknown: None
interface: MixinCanNotIncludeSpecialOperation
    unknown: None (None)
interface: MixinCanNotIncludeStaticMember
    unknown: None (None)
interface: MixinCanNotIncludeIterable
    unknown: None (None)
interface: MixinCanNotIncludeMaplike
    unknown: None (None)
interface: MixinCanNotIncludeSetlike
    unknown: None (None)
interface: Underscores
    attribute: or (or)
    method: includes(value) (includes)
interface: BigNumbers
    const: biiig (biiig)
FIND:
callMe/round
Foo/method(x, y, inf, ...fooArg)/y
Foo/method(string, foo)
Foo
Foo/MyOtherConstructor(two, longest)/longest
Foo/method(x, y, inf, ...fooArg)/fooArg
Window
LinkStyle/mediaText
<c method><t><p><k>unsigned</k> <k>long</k> <k>long</k></p></t> <n>method</n>(<c argument><t><s><k>DOMString</k></s></t> <n>string</n></c>, <c argument><k>optional</k> <t><tn>Foo</tn></t> <n>foo</n> = {}</c>);</c>
Foo/method(x, y, inf, ...fooArg)
Foo/method(string, foo)
NORMALIZE:
foo()
unknown()
testMethod(one, two)
testMethod2(one, two, and a half)
bob(xxx)
bob(name)
bob(name)
method(x, y, inf, ...fooArg), method(string, foo), method(string)
method()
method(x)
method(x, y, inf, ...fooArg)
method(x, y, bar)
abort()
