-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathparser.mly
More file actions
43 lines (37 loc) · 1.14 KB
/
Copy pathparser.mly
File metadata and controls
43 lines (37 loc) · 1.14 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
%token <float> FLOAT
%token PLUS
%token MINUS
%token TIMES
%token DIVIDE
%token COLON
%token COMMA
%token LPAREN
%token RPAREN
%token EQUAL
%token <string> CELL
%token <string> FUNCTION
%token EOF
%start <Expr.t> prog
%%
prog :
| EQUAL; e = expr; EOF { e }
| f = FLOAT; EOF { Expr.Float f }
| PLUS; f = FLOAT; EOF { Expr.Float f }
| MINUS; f = FLOAT; EOF { Expr.Float (-. f) }
| EOF { Expr.Null }
expr :
| p1 = expr; PLUS; p2 = product { Expr.Add (p1,p2) }
| p1 = expr; MINUS; p2 = product { Expr.Sub (p1,p2) }
| p = product { p }
product :
| p1 = product; TIMES; p2 = simple_expr { Expr.Multiply (p1,p2) }
| p1 = product; DIVIDE; p2 = simple_expr { Expr.Divide (p1,p2) }
| e = simple_expr { e }
simple_expr :
| PLUS; p = simple_expr { Expr.UnaryPlus p }
| MINUS; p = simple_expr { Expr.UnaryMinus p }
| LPAREN; e = expr; RPAREN { e }
| f = FLOAT { Expr.Float f }
| f = FUNCTION; LPAREN; e = separated_list(COMMA,expr); RPAREN { Expr.Function (String.uppercase_ascii f, e) }
| c1 = CELL; COLON; c2 = CELL { Expr.range_of_cells (Expr.cell_of_string c1) (Expr.cell_of_string c2) }
| c = CELL { Expr.cell_of_string c }