-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogo3d.g4
More file actions
114 lines (95 loc) · 2.58 KB
/
Copy pathlogo3d.g4
File metadata and controls
114 lines (95 loc) · 2.58 KB
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
105
106
107
108
109
110
111
112
113
114
grammar logo3d;
root : expr+ EOF ;
args : (op (',' op)*)? ;
call : ID '('args')'
| MAIN
;
expr : call #CALLPROC
| PROC MAIN IS block END #MAIN
| PROC ID '('args')' IS block END #PROC
;
block : action+;
action : ID ASSIGN op #ASSIGN
| WRITE op #WRITE
| IF comp THEN block (ELSE block)? END #IF
| WHILE comp DO block END #WHILE
| FOR ID FROM op TO op DO block END #FOR
| READ ID #READ
| COLOR '(' op ',' op ',' op ')' #COLOR
| FORWARD '('op')' #FORWARD
| BACKWARD '('op')' #BACKWARD
| LEFT '('op')' #LEFT
| RIGHT '('op')' #RIGHT
| UP '('op')' #UP
| DOWN '('op')' #DOWN
| HOME #HOME
| HIDE #HIDE
| SHOW #SHOW
| call #CALLACTION
;
comp : op EQ op #EQ
| op GT op #GT
| op GTE op #GTE
| op LT op #LT
| op LTE op #LTE
| op DIF op #DIF
;
integernumber : ('-')? INT
| ('+')? INT
;
floatnumber : ('-')? FLOAT
| ('+')? FLOAT
;
op : '(' op ')' #BRACKETS
| <assoc=right> op POT op #POT
| op MULT op #MULT
| op DIV op #DIV
| op SUM op #SUM
| op SUB op #SUB
| ID #ID
| integernumber #INT
| floatnumber #FLOAT
;
SUM : '+' ;
SUB : '-' ;
MULT : '*' ;
DIV : '/' ;
POT : '^' ;
READ : '>>' ;
WRITE : '<<' ;
EQ : '==' ;
GT : '>' ;
LT : '<' ;
GTE : '>=' ;
LTE : '<=' ;
DIF : '!=' ;
ASSIGN : ':=' ;
IF : 'IF' ;
WHILE : 'WHILE' ;
MAIN : 'main()' ;
PROC : 'PROC' ;
FOR : 'FOR' ;
FROM : 'FROM' ;
TO : 'TO' ;
DO : 'DO' ;
IS : 'IS' ;
ELSE : 'ELSE' ;
THEN : 'THEN' ;
COLOR : 'color' ;
FORWARD : 'forward' ;
BACKWARD : 'backward' ;
LEFT : 'left' ;
RIGHT : 'right' ;
UP : 'up' ;
DOWN : 'down' ;
HOME : 'home()' ;
HIDE : 'hide()' ;
SHOW : 'show()' ;
END : 'END' ;
ID : [a-zA-Z_] [a-zA-Z_0-9]* ;
INT : [0-9]+ ;
FLOAT : [0-9]+ '.' [0-9]*
| '.' [0-9]+
;
COMMENT : '//' ~[\r\n]* -> skip ;
WS : [ \n\r]+ -> skip ;