예제 #1
0
        public override dynamic Solve(Env.Environment env)
        {
            Env.Environment environ = Env.Environment.Scope(env);
            dynamic         value   = environ.Get(this.Parameters[0]);
            string          input   = "";

            using (StreamWriter writer = new StreamWriter(Console.OpenStandardOutput())) {
                writer.Write(value.Value.ToString());
            }
            using (StreamReader reader = new StreamReader(Console.OpenStandardInput())) {
                input = reader.ReadLine();
                reader.Close();
            }
            return(new Tree.String(input));
        }
예제 #2
0
        public override dynamic Evaluate(Env.Environment env)
        {
            /**
             * Should create a new environment scope
             * Assign all arguments to function paramenter names in order
             * Store them in the new Environment scope
             * Evaluate the function from the environment passing the new scope
             */
            Env.Environment scope    = Env.Environment.Scope(env);
            Function        function = env.Get(this.name);

            if (this.arguments.Count != function.Parameters.Count)
            {
                this.Error("Expected " + function.Parameters.Count + " parameters to function " + this.name + " call. Found " + this.arguments.Count + " parameters.", 0, 0);
            }
            for (int i = 0; i < this.arguments.Count; i++)
            {
                scope.Set(function.Parameters[i], this.arguments[i].Evaluate(env));
            }
            return(function.Solve(scope));
        }
예제 #3
0
        public override dynamic Solve(Env.Environment env)
        {
            Env.Environment environ = Env.Environment.Scope(env);
            AST             value   = environ.Get(this.Parameters[0]);
            dynamic         print   = "";

            if (value.Type == TreeType.LIST)
            {
                print = value.Evaluate(environ).ToString();
            }
            else if (value.Type == TreeType.LIST_ACCESS)
            {
                print = value.Evaluate(env).ToString();
            }
            else
            {
                print = value.Evaluate(environ).Value;
            }
            using (StreamWriter writer = new StreamWriter(Console.OpenStandardOutput())) {
                writer.Write(print.ToString() + "\n");
            }
            return(value);
        }