forked from Abdur-rahmaanJ/greenberry
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrammar.txt
66 lines (50 loc) · 1.05 KB
/
grammar.txt
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
ws -> white space
nl -> new line
eof -> end of file symbol
statements : basic | simple | compound
basic :
assign
simple :
print
| plot
| if
| for
compound :
func
| class
assign :
'var' word '=' ( number
| word
| identifier word
| var_ref ) (nl | eof)
print :
'print' word (nl | eof)
| 'print' '@' var_ref (nl | eof)
| 'print' 'string' (word*1+) (nl | eof)
| 'print' 'eval' mexpr (nl | eof)
if :
'if' statement ('=' | '>' | '<') statement (nl | eof)
for :
'for' number 'times' ':' print (nl | eof)
plot :
'plot' (number ',' number) 'x-' word
(number ',' number) 'y-' word
func :
declaration
'func' word ':' print
with parameters
'func' 'p' (word*1+) ':' print
'func' 'p' word ':' print
'func' 'p' word word ':' print
call
'call' id
statement :
(var_ref | number)
identifier :
('bool' ('true' | 'false')
| 'string' (word*0+)
| '@' var_ref)
var_ref :
('@' id
| '@' id '[' number ']'
| '@' id '[' number ',' number ]')