forked from hedyorg/hedy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlevel13.txt
57 lines (43 loc) · 1.6 KB
/
level13.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
start: _EOL* statement+
statement: if_statement elif_statement* else_statement?
| repeat
| ranged_loop
| assignment _EOL+
| expression _EOL+
if_statement: "if" expression ":" _EOL INDENT statement+ DEDENT
elif_statement: "elif" expression ":" _EOL INDENT statement+ DEDENT
else_statement: "else" ":" _EOL INDENT statement+ DEDENT
repeat: "repeat" expression "times" ":" _EOL INDENT statement+ DEDENT
ranged_loop: "for" NAME "in" "range" "(" expression "," expression ")" ":" _EOL INDENT statement+ DEDENT
assignment: NAME "=" expression
?expression: sum
| expression "==" sum -> eq
| expression "!=" sum -> ne
| expression "<=" sum -> le
| expression ">=" sum -> ge
| expression "<" sum -> lt
| expression ">" sum -> gt
?sum: product
| sum "+" product -> addition
| sum "-" product -> substraction
?product: atom
| product "*" atom -> multiplication
| product "/" atom -> division
| product "%" atom -> modulo
?atom: NAME
| INTEGER
| FLOAT
| STRING
| "[" (expression? | (expression ",")+ expression) "]" -> list
| "(" expression? ")"
| NAME "(" (expression? | (expression ",")+ expression) ")" -> function_call
| NAME "[" expression "]" -> list_access
_EOL: /(\r?\n[\t ]*)+/
%import common.WS_INLINE
%import common.SIGNED_INT -> INTEGER
%import common.FLOAT -> FLOAT
%import common.CNAME -> NAME
%import common._STRING_ESC_INNER
%import common.ESCAPED_STRING -> STRING // TODO: support single quoted strings
%declare INDENT DEDENT
%ignore WS_INLINE