Skip to content

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? -/- [\/].[\*]