summaryrefslogtreecommitdiff
path: root/doc/language.txt
blob: fa357dd009806b3761b49c9cf5d64191bd342a30 (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
@@ No support for template ids
@@ No support for expressions (e.g., 2*2)

Token types:
      keyword
      identifier      
      punctuation (";" "{" "}" "(" ")" "," "|" "=" ":")
      bracket-literal
      string-literal     
      bool-literal
      int-literal
      float-literal
      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) ";"

type-spec:
	fundamental-type-spec
	qualified-name

option-name-seq:
	option-name
	option-name-seq "|" option-name;

option-name:
	option-identifier
	string-literal

initializer:
	"=" argument-expr
	"(" argument-seq(opt) ")"

argument-seq:
	argument-expr
	argument-seq "," argument-expr

argument-expr:
	bool-literal
	int-literal
	float-literal
	string-literal
	qualified-name

qualified-name:
	identifier
	qualified-name "::" identifier

fundamental-type-spec:
	"bool"
	 ...
	"long double"