summaryrefslogtreecommitdiff
path: root/doc/language.txt
blob: 46bb75333e754ed51d67eb806abfd09d4aa21b64 (plain)
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
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., <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" 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"