//(expr )? expr2 : expr3 private Expr Ternary() { var expr = Equality(); while (Match(QUESTION)) { var expr2 = Expression(); var token = Consume(SEMICOLON, " Conditional missing ':' operator"); var expr3 = Ternary(); expr = new Expr.Ternary(expr, expr2, expr3); } return(expr); }
/// <summary> /// ternary -> equality ("?" expression ":" ternary)? /// </summary> /// <returns></returns> private Expr Ternary() { Expr expr = this.Equality(); if (match(QUESTION)) { Expr thenC = this.Expression(); Consume(COLON, "Expect ':' and yet none was forth coming"); Expr elseBranch = Ternary(); expr = new Expr.Ternary(expr, thenC, elseBranch); } return(expr); }
public string VisitTernary(Expr.Ternary expr) => Parenthesize("conditional", expr.cond, expr.@true, expr.@false);
public string VisitTernaryExpr(Expr.Ternary expr) => $"({expr.Expression.Accept(this)} ? {expr.IfTrue.Accept(this)} : {expr.IfFalse.Accept(this)})";
public string VisitTernary(Expr.Ternary expr) => Printer("conditional", expr.cond, expr.@true, expr.@false);