parser: use mkBinary (allocating them on heap)
This commit is contained in:
parent
9ad0c7df0e
commit
2ba0efa92c
1 changed files with 10 additions and 56 deletions
|
@ -386,15 +386,10 @@ pub const Parser = struct {
|
||||||
|
|
||||||
while (self.peek().ttype == .EqualEqual) {
|
while (self.peek().ttype == .EqualEqual) {
|
||||||
var op = self.peek();
|
var op = self.peek();
|
||||||
var right = try self.parseComparison();
|
_ = try self.nextToken();
|
||||||
|
|
||||||
expr.* = ast.Expr{
|
var right = try self.parseComparison();
|
||||||
.Binary = ast.BinaryExpr{
|
expr = try self.mkBinary(expr, op, right);
|
||||||
.left = expr,
|
|
||||||
.op = op,
|
|
||||||
.right = right,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return expr;
|
return expr;
|
||||||
|
@ -409,16 +404,11 @@ pub const Parser = struct {
|
||||||
.Less,
|
.Less,
|
||||||
.LessEqual,
|
.LessEqual,
|
||||||
})) {
|
})) {
|
||||||
var op = self.previous();
|
var op = self.peek();
|
||||||
var right = try self.parseAddition();
|
_ = try self.nextToken();
|
||||||
|
|
||||||
expr.* = ast.Expr{
|
var right = try self.parseAddition();
|
||||||
.Binary = ast.BinaryExpr{
|
expr = try self.mkBinary(expr, op, right);
|
||||||
.left = expr,
|
|
||||||
.op = op,
|
|
||||||
.right = right,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return expr;
|
return expr;
|
||||||
|
@ -427,47 +417,16 @@ pub const Parser = struct {
|
||||||
fn parseAddition(self: *@This()) !*Expr {
|
fn parseAddition(self: *@This()) !*Expr {
|
||||||
var expr = try self.parseMultiplication();
|
var expr = try self.parseMultiplication();
|
||||||
|
|
||||||
std.debug.warn("left expr at addition:");
|
|
||||||
ast.printExpr(expr);
|
|
||||||
std.debug.warn("\n");
|
|
||||||
|
|
||||||
while (self.compareAnyOf(&[_]TokenType{
|
while (self.compareAnyOf(&[_]TokenType{
|
||||||
.Minus, .Plus,
|
.Minus, .Plus,
|
||||||
})) {
|
})) {
|
||||||
var op = self.peek();
|
var op = self.peek();
|
||||||
_ = try self.nextToken();
|
_ = try self.nextToken();
|
||||||
|
|
||||||
std.debug.warn("==OP token {}\n", op);
|
|
||||||
|
|
||||||
var right = try self.parseMultiplication();
|
var right = try self.parseMultiplication();
|
||||||
|
|
||||||
std.debug.warn("right expr at addition:");
|
|
||||||
ast.printExpr(right);
|
|
||||||
std.debug.warn("\n");
|
|
||||||
|
|
||||||
std.debug.warn("left expr at combination:");
|
|
||||||
ast.printExpr(expr);
|
|
||||||
std.debug.warn("\n");
|
|
||||||
|
|
||||||
expr = try self.mkBinary(expr, op, right);
|
expr = try self.mkBinary(expr, op, right);
|
||||||
|
|
||||||
//expr.* = ast.Expr{
|
|
||||||
// .Binary = ast.BinaryExpr{
|
|
||||||
// .left = expr,
|
|
||||||
// .op = op,
|
|
||||||
// .right = right,
|
|
||||||
// },
|
|
||||||
//};
|
|
||||||
|
|
||||||
std.debug.warn("final expr at addition:");
|
|
||||||
ast.printExpr(expr);
|
|
||||||
std.debug.warn("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std.debug.warn("ret expr at addition:");
|
|
||||||
ast.printExpr(expr);
|
|
||||||
std.debug.warn("\n");
|
|
||||||
|
|
||||||
return expr;
|
return expr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,16 +436,11 @@ pub const Parser = struct {
|
||||||
while (self.compareAnyOf(&[_]TokenType{
|
while (self.compareAnyOf(&[_]TokenType{
|
||||||
.Star, .Slash,
|
.Star, .Slash,
|
||||||
})) {
|
})) {
|
||||||
var op = self.previous();
|
var op = self.peek();
|
||||||
|
_ = try self.nextToken();
|
||||||
var right = try self.parseUnary();
|
var right = try self.parseUnary();
|
||||||
|
|
||||||
expr.* = ast.Expr{
|
expr = try self.mkBinary(expr, op, right);
|
||||||
.Binary = ast.BinaryExpr{
|
|
||||||
.left = expr,
|
|
||||||
.op = op,
|
|
||||||
.right = right,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return expr;
|
return expr;
|
||||||
|
|
Loading…
Reference in a new issue