Token types: keyword identifier punctuation (";" "{" "}" "(" ")" "," "|" "=" ":") cxx-path-literal ("c++:path", , "path", ) cli-path-literal ("cli:path", , "path.cli", ) 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: source-decl include-decl include-decl-seq include-decl source-decl: "source" cli-path-literal ";" include-decl: "include" include-path ";" include-path: cxx-path-literal cli-path-literal decl-seq: decl decl-seq decl decl: source-decl scope-doc namespace-def class-def scope-doc: string-literal "{" doc-string-seq "}" namespace-def: "namespace" identifier "{" namespace-body "}" namespace-body: decl-seq(opt) class-def: "class" identifier inheritance-spec(opt) abstract-spec(opt) "{" class-decl-seq(opt) "};" inheritance-spec: ":" base-seq base-seq: qualified-name base-seq "," qualified-name abstract-spec: "=" "0" class-decl-seq: class-decl class-decl-seq class-decl class-decl scope-doc option-def option-def: type-spec option-name-seq initializer(opt) option-def-trailer 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-def-trailer: ";" option-doc 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"