]> Repositories - zlox.git/blob - src/expr.zig
Remove unnecessary error logic
[zlox.git] / src / expr.zig
1 const Token = @import("Token.zig");
2
3 pub const Expr = union(enum) {
4     binary: Binary,
5     grouping: Grouping,
6     literal: Literal,
7     unary: Unary,
8
9     const Binary = struct {
10         left: *const Expr,
11         operator: Token,
12         right: *const Expr,
13
14         pub fn init(left: *const Expr, operator: Token, right: *const Expr) Binary {
15             return .{
16                 .left = left,
17                 .operator = operator,
18                 .right = right,
19             };
20         }
21     };
22
23     const Grouping = struct {
24         expression: *const Expr,
25
26         pub fn init(expression: *const Expr) Grouping {
27             return .{
28                 .expression = expression,
29             };
30         }
31     };
32
33     const Literal = struct {
34         value: Token.Literal,
35
36         pub fn init(value: Token.Literal) Literal {
37             return .{
38                 .value = value,
39             };
40         }
41     };
42
43     const Unary = struct {
44         operator: Token,
45         right: *const Expr,
46
47         pub fn init(operator: Token, right: *const Expr) Unary {
48             return Unary{
49                 .operator = operator,
50                 .right = right,
51             };
52         }
53     };
54 };