private Expr ParseLambda() { Span prev = CurrentSpan(); Consume(TokenType.Backslash); List <Expr.Variable> args = new List <Expr.Variable> { ParseVar() }; while (!IsAtEnd() && Check(TokenType.Ident)) { args.Add(ParseVar()); } Consume(TokenType.Arrow); Expr e = ParseExpr(); Span lambdaSpan = prev.Combine(e.Span); Expr final = new Expr.Lambda(args.Last(), e, lambdaSpan); args.RemoveAt(args.Count - 1); for (int i = args.Count - 1; i >= 0; i--) { final = new Expr.Lambda(args[i], final, lambdaSpan); } return(final); }
public string Visit(Expr.Lambda lam) { return(MakeParend("lam", lam.Arg, lam.Body)); }