WHITESPACE = _{ " " | "\n" } ident = @{ ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | "_")* } vector = { "vector<" ~ typeid ~ ">" } typeid = { vector | ident } param = { ident ~ ":" ~ typeid } param_list = { param* } typedef = { ident ~ param_list ~ "=" ~ ident ~ ";" } docdescr = ${ ("\n//-"? ~ !"\n" ~ !"@" ~ ANY)* } docparam = ${ "@" ~ ident ~ " " ~ docdescr } docstring = ${ ("//" ~ docparam+ ~ ("\n")+)+ } section = { "---" ~ ident ~ "---"} definition = { docstring ~ typedef } item = _{ definition | section } tl = _{ SOI ~ (item)* ~ EOI }