public object VisitLogicalExpr(LogicalExpr expr) { Resolve(expr.Left); Resolve(expr.Right); return(null); }
// logic_and → equality ( "and" equality )* ; private Expr And() { Expr expr = Equality(); while (CheckCurrentToken(TokenType.And)) { var op = GetCurrentTokenAndAdvance(); Expr right = Equality(); expr = new LogicalExpr(expr, op, right); } return(expr); }
// LogicalAnd -> Equality ( "and" Equality )* private AstNode LogicalAnd() { AstNode expr = Equality(); while (Match(TokenType.AND)) { Token oper = Previous(); AstNode right = Equality(); expr = new LogicalExpr(expr, oper, right); } return(expr); }
public object Visit_LogicalExpr(LogicalExpr expr) { Object left = Evaluate(expr.left); if (expr.op.type == TokenType.Or) { if (IsTruthy(left)) { return(left); } } else { if (!IsTruthy(left)) { return(left); } } return(Evaluate(expr.right)); }
public object VisitLogicalExpr(LogicalExpr expr) { object left = Evaluate(expr.Left); // Short-circuiting logic if (expr.Oper.Type == TokenType.OR) { if (IsTruthy(left)) { return(left); } } else { if (!IsTruthy(left)) { return(left); } } return(Evaluate(expr.Right)); }
public Void Visit_LogicalExpr(LogicalExpr expr) { Resolve(expr.left); Resolve(expr.right); return(null); }
public string Visit_LogicalExpr(LogicalExpr expr) { return(Parenthesize(expr.op.ToText(), expr.left, expr.right)); }