-
Notifications
You must be signed in to change notification settings - Fork 1
/
parser.y
100 lines (71 loc) · 1.82 KB
/
parser.y
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
class YassParser
rule
literal : INT
| FLOAT
| STRING
expression : literal
| IDENTIFER
| braces
| binary
| unary
| array_get
| call
braces : "(" expression ")"
binary : expression "+" expression
| expression "-" expression
| expression "*" expression
| expression "/" expression
| expression "==" expression
| expression "!=" expression
| expression ">=" expression
| expression "<=" expression
| expression ">" expression
| expression "<" expression
| expression AND expression
| expression OR expression
unary : "-" expression
| NOT expression
array_get : expression "[" expression "]"
call : expression "(" arg_list ")"
arg_list : expression
| expression "," arg_list
variable : IDENTIFER
set : variable var_assignment
| variable "[" expression "]" var_assignment
var_assignment: "=" expression
scope : SCOPE IDENTIFER
name_list : /*nothing*/
| "," NAME
| "," NAME name_list
parameter_list: /*nothing*/
| variable NAME name_list
| variable NAME name_list "," parameter_list
function : FUN NAME "(" parameter_list ")"
| FUN NAME "(" parameter_list ")" ":" variable
line_word : scope
| function
| call
| set
| var_definition
| EXITWHEN expression
| IF expression
| ELSEIF expression
| ELSE
line : line_word EOL
| line_word end_scope
var_declaration: ARRAY NAME
| NAME
var_assignment: "=" expression
var_decl_assign: var_declaration
| var_declaration var_assignment
var_decl_assign_list: /*nothing*/
| "," var_decl_assign var_decl_assign_list
var_definition: variable var_decl_assign
| variable var_decl_assign var_decl_assign_list
end_scope : END
| END end_scope
| END EOL
main : /*nothing*/
| EOL
| line main
end