1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
Token types:
keyword
identifier
punctuation (";" "{" "}" "(" ")" "," "|" "=" ":")
cxx-path-literal ("c++:path", <c++:path>, "path", <path>)
cli-path-literal ("cli:path", <cli:path>, "path.cli", <path.cli>)
char-literal
string-literal
bool-literal
int-literal
float-literal
call-expr (e.g., (a, 2))
template-expr (e.g., <a, 2>)
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" include-path ";"
include-path:
cxx-path-literal
cli-path-literal
decl-seq:
decl
decl-seq decl
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) "{" option-def-seq(opt) "};"
inheritance-spec:
":" base-seq
base-seq:
qualified-name
base-seq "," qualified-name
abstract-spec:
"=" "0"
option-def-seq:
option-def
option-def-seq option-def
option-def:
type-spec option-name-seq initializer(opt) option-doc(opt) ";"
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"
|