Character-Class.sdf3
pdmosses/sdf/org.metaborg.meta.lang.template/syntax/characterclass/Character-Class.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
|
module
imports characterclass/Character
context-free syntax
CharRange = <<Character>>
CharRange.Range = <<start:Character>-<end:Character>>
= <<CharRange>>
//"left":CharRanges "right":CharRanges -> CharRanges {cons("conc"),right,memo}
.Conc = <<CharRanges><CharRanges>> {right, memo}
= <(<CharRanges>)> {bracket}
OptCharRanges.Absent = <>
OptCharRanges.Present = <<CharRanges>>
.Simple = <[<OptCharRanges>]>
.Comp = <~<CharClass>>
//"left":CharClass "/" "right":CharClass -> CharClass {cons("diff"),left,memo}
.Diff = <<CharClass>/<CharClass>> {left, memo}
//"left":CharClass "/\\" "right":CharClass -> CharClass {cons("isect"),left,memo}
.Isect = <<CharClass>/\\<CharClass>> {left, memo}
//"left":CharClass "\\/" "right":CharClass -> CharClass {cons("union"),left}
.Union = <<CharClass>\\/<CharClass>> {left}
= <(<CharClass>)> {bracket, avoid}
context-free priorities
CharClass.Comp > CharClass.Diff >
CharClass.Isect > CharClass.Union
|