コード例 #1
0
ファイル: Add.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     dynamic r = stack.Pop();
     dynamic l = stack.Pop();
     stack.Push(l + r);
     //throw new ArgumentException(string.Format("Cannot add operands of type {0} and {1}", l.GetType().Name, r.GetType().Name));
 }
コード例 #2
0
ファイル: NetstackRuntime.cs プロジェクト: Baggykiin/Netstack
 public NetStack Evaluate(NetStack stack, string input)
 {
     var statement = parser.Parse(input);
     try
     {
         statement.Evaluate(stack);
     }
     catch (Exception e)
     {
         throw new RuntimeException(e);
     }
     return stack;
 }
コード例 #3
0
ファイル: While.cs プロジェクト: Baggykiin/Netstack
        public override void Execute(NetStack stack)
        {
            var condition = stack.Pop<Statement>();
            var body = stack.Pop<Statement>();

            condition.Evaluate(stack);
            var result = stack.Pop<bool>();
            while (result)
            {
                body.Evaluate(stack);
                condition.Evaluate(stack);
                result = stack.Pop<bool>();
            }
        }
コード例 #4
0
ファイル: Statement.cs プロジェクト: Baggykiin/Netstack
 public void Evaluate(NetStack stack)
 {
     foreach(var token in Tokens)
     {
         try
         {
             token.Execute(stack);
         }
         catch (StackEmptyException)
         {
             throw new StackEmptyException(string.Format("\"{0}\" attempted to pop a frame while the stack was empty.", token.GetType().FullName));
         }
     }
 }
コード例 #5
0
ファイル: LateBindingCall.cs プロジェクト: Baggykiin/Netstack
        public override void Execute(NetStack stack)
        {
            Statement functionBody;
            try
            {
                functionBody = stack.GetFunction(label);
            }
            catch (KeyNotFoundException)
            {
                throw new RuntimeBinderException(string.Format("Failed to call function (no binding for \"{0}\" exists).", label));
            }

            functionBody.Evaluate(stack);
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: Baggykiin/Netstack
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to the Netstack REPL.");

            var runtime = new NetstackRuntime();

            bool quitRequested = false;
            NetStack stack = new NetStack();
            while (!quitRequested)
            {
                Console.Write("> ");
                var input = Console.ReadLine();
                if(input == "quit")
                {
                    quitRequested = true;
                }else
                {
                    try
                    {
                        stack = runtime.Evaluate(stack.Clear(), input);
                        var previousColour = Console.ForegroundColor;
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.Write("--> ");
                        Console.WriteLine(stack.ToString());
                        Console.ForegroundColor = previousColour;
                    }
                    catch (RuntimeException e)
                    {
                        var previousColour = Console.ForegroundColor;
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Execution halted: " + e.InnerException.Message);
                        Console.ForegroundColor = previousColour;
                    }
                    catch (SyntaxException e)
                    {
                        var previousColour = Console.ForegroundColor;
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("Parsing fail: " + e.InnerException.Message);
                        Console.ForegroundColor = previousColour;
                    }
                }
            }
            Console.WriteLine("Goodbye");
        }
コード例 #7
0
ファイル: Swap.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var top = stack.Pop();
     var bottom = stack.Pop();
     stack.Push(top).Push(bottom);
 }
コード例 #8
0
ファイル: GreaterThan.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     dynamic r = stack.Pop();
     dynamic l = stack.Pop();
     stack.Push(l > r);
 }
コード例 #9
0
ファイル: Equals.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var l = stack.Pop();
     var r = stack.Pop();
     stack.Push(l.Equals(r));
 }
コード例 #10
0
ファイル: Clear.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Clear();
 }
コード例 #11
0
ファイル: Pop.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Pop();
 }
コード例 #12
0
ファイル: Read.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     Console.Write("input> ");
     stack.Push(Console.ReadLine());
 }
コード例 #13
0
ファイル: Label.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var label = stack.Pop<string>();
     stack.Push(new FunctionLabel(label));
 }
コード例 #14
0
ファイル: Dup.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var val = stack.Pop();
     stack.Push(val).Push(val);
 }
コード例 #15
0
ファイル: Function.cs プロジェクト: Baggykiin/Netstack
 public abstract void Execute(NetStack stack);
コード例 #16
0
ファイル: BooleanLiteral.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Push(value);
 }
コード例 #17
0
ファイル: Increment.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     dynamic variable = stack.Pop();
     stack.Push(++variable);
 }
コード例 #18
0
ファイル: Grab.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var offset = stack.Pop<long>();
     var value = stack.Peek(offset);
     stack.Push(value);
 }
コード例 #19
0
ファイル: Parse.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Push(new Parser().Parse(stack.Pop<string>()));
 }
コード例 #20
0
ファイル: NetstackRuntime.cs プロジェクト: Baggykiin/Netstack
 public NetStack Evaluate(string input)
 {
     var stack = new NetStack();
     return Evaluate(stack, input);
 }
コード例 #21
0
ファイル: Decrement.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Push(stack.Pop<long>() - 1);
 }
コード例 #22
0
ファイル: Eval.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var statement = stack.Pop() as Statement;
     statement.Evaluate(stack);
 }
コード例 #23
0
ファイル: Reset.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Reset();
 }
コード例 #24
0
ファイル: FunctionLabel.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     stack.Push(this);
 }
コード例 #25
0
ファイル: Defn.cs プロジェクト: Baggykiin/Netstack
 public override void Execute(NetStack stack)
 {
     var label = stack.Pop<FunctionLabel>();
     var body = stack.Pop<Statement>();
     stack.BindFunction(body, label.Label);
 }