-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCfdg.g4
78 lines (60 loc) · 1.6 KB
/
Cfdg.g4
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
grammar Cfdg;
contextfree : statements EOF ;
statements : statements statement | ;
statement : startshape | background | design_rule ;
startshape : STARTSHAPE NAME ;
background : BACKGROUND '{' color_adjustments '}' ;
design_rule
: RULE NAME '{' replacements '}'
| RULE NAME num '{' replacements '}'
;
replacements : replacement_loop* ;
replacement_loop
: replacement
| NUMBER '*' modification replacement
| NUMBER '*' modification '{' replacements '}'
;
replacement : NAME modification ;
modification : '{' adjustments '}' | '[' adjustments ']' ;
adjustments : adjustment*;
adjustment : geom_adjustment | color_adjustment ;
color_adjustments : color_adjustments color_adjustment | ;
geom_adjustment
: XSHIFT num
| YSHIFT num
| ZSHIFT num
| ROTATE num
| SIZE num
| SIZE num num
| SIZE num num num
| SKEW num num
| FLIP num
;
color_adjustment
: HUE num
| SATURATION num
| BRIGHTNESS num
| ALPHA num
;
num : NUMBER | '-' NUMBER | '+' NUMBER ;
STARTSHAPE : 'startshape' ;
BACKGROUND : 'background' ;
RULE : 'rule' ;
ROTATE : ('rotate' | 'r') ;
FLIP : ('flip' | 'f') ;
HUE : ('hue' | 'h') ;
SATURATION : ('saturation' | 'sat') ;
BRIGHTNESS : ('brightness' | 'b') ;
ALPHA : ('alpha' | 'a') ;
XSHIFT : 'x' ;
YSHIFT : 'y' ;
ZSHIFT : 'z' ;
SIZE : ('size' | 's') ;
SKEW : 'skew' ;
fragment DIGIT : [0-9] ;
NUMBER : DIGIT+ | '.' DIGIT* | DIGIT+ '.' DIGIT* ;
NAME : [a-zA-Z_][a-zA-Z_0-9]* ;
WS : [ \t\r\n]+ -> skip ;
COMMENT : '/*' .*? '*/' -> skip ;
LINE_COMMENT : '//' ~[\r\n]* -> skip ;
LINE_BANG_COMMENT : '#' ~[\r\n]* -> skip ;