예제 #1
0
파일: Evaluator.cs 프로젝트: azbyn/oop
        public EvalObject Visit(AstNode.FunCall v)
        {
            var fun = Eval(v.fun);

            return(fun switch {
                EvalObject.Int _ => throw new EvalException(v.pos, "Int is not callable"),
                EvalObject.Builtin b => b.Call(Eval(v.arg)),
                EvalObject.Lambda l => l.Call(Eval(v.arg), this),
                _ => throw new InvalidOperationException(),
            });
예제 #2
0
파일: Parser.cs 프로젝트: azbyn/oop
        // funCall: [funCall] ternary
        AstNode FunCall()
        {
            var a = Ternary();

            for (;;)
            {
                if (IsEof() || Is(TT.RightParen) || Is(TT.Question) ||
                    Is(TT.Colon) || Is(TT.Assign))
                {
                    return(a);
                }
                Pos p = pos;
                a = new AstNode.FunCall(p, a, Ternary());
            }
        }