Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public string Visit(Expr.Lambda lam)
 {
     return(MakeParend("lam", lam.Arg, lam.Body));
 }