Skip to content

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