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,
)