Statement { Enum(Enum) Node(Node) } Enum(name: Name, nodes: Node[]) Node(name: Name, params: Param[]) Param { Named(name: Name, type_: Type) Unnamed(Type) } Type { Name(Name) Optional(Type) Multiple(Type) } Name( string, line: number, col: number, )