Common.sdf3
pdmosses/metaborg-poosl/org.metaborg.lang.poosl/syntax/Common.sdf3
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
|
module
// --- ID -------
lexical sorts
ID ENV
lexical syntax
ID = [a-zA-Z] [a-zA-Z0-9\_]*
ENV = "${" [a-zA-Z0-9\_]+ "}"
lexical restrictions
ID -/- [a-zA-Z0-9\_]
// --- BOOLEANS -------
lexical sorts
BOOL
lexical syntax
BOOL = "false"
BOOL = "true"
lexical syntax
ID = "false" {reject}
ID = "true" {reject}
// --- NUMBERS -------
lexical sorts
INT FLOAT
BIN_CORE
lexical syntax
INT = [\-\+]? (INT_CORE_NE | (INT_CORE EXP) | BIN_CORE | HEX_CORE)
= [\-\+]? (REAL_CORE_NE | (REAL_CORE EXP))
FLOAT = [\-\+]? ((REAL_CORE_NE [fF]) | (REAL_CORE EXP [fF]) | "nan" | "inf")
= [eE] [\+]? [0-9]+
= REAL_CORE
= INT_CORE
= INT_CORE "." [0-9]* | [0-9]+
= [1-9][0-9]*
= ZERO
BIN_CORE = "0" [bB] [0-1]+
= "0" [xX] [0-9a-fA-F]+
= "0"
lexical syntax
ID = "nan" {reject}
ID = "inf" {reject}
lexical restrictions
REAL -/- [fF]
REAL_CORE_NE -/- [eE]
INT_CORE_NE -/- [eE]
HEX_CORE -/- [0-9a-fA-F]
ZERO -/- [xX]
ZERO -/- [bB]
// --- STRINGS -------
lexical sorts
CHARACTER
STRING_CHAR CHARACTER_CHAR
ESCAPE_ZERO BACKSLASH_CHAR
lexical syntax
= "\"" STRING_CHAR* "\""
CHARACTER = "'" CHARACTER_CHAR "'"
STRING_CHAR = ~[\\\"\n]
STRING_CHAR = ESCAPE_SEQUENCE
CHARACTER_CHAR = ~[\\\'\n]
CHARACTER_CHAR = ESCAPE_SEQUENCE
CHARACTER_CHAR = ESCAPE_ZERO
= "\\" [ntvbrfa\\\?\'\"]
= "\\x" [0-9a-fA-F][0-9a-fA-F]?
= "\\x0" {reject}
= "\\x00" {reject}
ESCAPE_ZERO = "\\x0" | "\\x00"
// --- LAYOUT -------
lexical sorts
lexical syntax
LAYOUT = [\ \t\n\r]
LAYOUT = ML_COM
= "/*"
(~[\*] | LONESTAR | ML_COM)*
"*/"
LAYOUT = "//" ~[\n\r]* ([\n\r] | EOF)
= [\*]
=
lexical restrictions
LONESTAR -/- [\/]
EOF -/- ~[]
context-free restrictions
LAYOUT? -/- [\ \t\n\r]
LAYOUT? -/- [\/].[\/]
LAYOUT? -/- [\/].[\*]
|