Token types: keyword identifier punctuation (";" "{" "}" "(" ")" "," "|" "=" ":") path-literal char-literal string-literal bool-literal int-literal float-literal call-expr (e.g., (a, 2)) template-expr (e.g., ) end-of-stream def-unit: include-decl-seq(opt) decl-seq(opt) include-decl-seq: include-decl include-decl-seq include-decl include-decl: "include" path-literal ";" decl-seq: decl decl-seq decl decl: namespace-def class-def namespace-def: "namespace" identifier "{" namespace-body "}" namespace-body: decl-seq(opt) class-def: "class" identifier "{" option-def-seq(opt) "};" option-def-seq: option-def option-def-seq option-def option-def: type-spec option-name-seq initializer(opt) option-doc ";" type-spec: fundamental-type-spec qualified-name option-name-seq: option-name option-name-seq "|" option-name option-name: option-identifier string-literal initializer: "=" initializer-expr call-expr initializer-expr: bool-literal int-literal float-literal char-literal string-literal qualified-name call-expr option-doc: "{" doc-string-seq "}" doc-string-seq: string-literal doc-string-seq "," string-literal qualified-name: "::" qualified-name-trailer qualified-name-trailer qualified-name-trailer: template-id qualified-name "::" template-id template-id: identifier template-expr(opt) fundamental-type-spec: "bool" ... "long double"