Beispiel #1
0
        public void Solve(List <string> values)
        {
            MyExecutionPosition myExecutionPosition = new MyExecutionPosition(values);

            while (!myExecutionPosition.HasEnded)
            {
                char         c           = values[myExecutionPosition.Y][myExecutionPosition.X];
                IInterpreter interpreter = InterpreterFactory.Create(c, myExecutionPosition);
                if (c == '_')
                {
                    string a = "";
                }
                interpreter.Interprete(this.MyStacks);
                myExecutionPosition.Next();
            }
            Console.Write(myExecutionPosition.Output);
        }
Beispiel #2
0
        public static IInterpreter Create(char c, MyExecutionPosition myExecutionPosition)
        {
            if (myExecutionPosition.IsStringActive && c != '"')
            {
                return(new MyString(c, myExecutionPosition));
            }
            else
            {
                switch (c)
                {
                case 'I':
                case 'C':
                    return(new Printer(c, myExecutionPosition));

                case 'S':
                    return(new Skipper(myExecutionPosition));

                case '_':
                case '|':
                    return(new IfStatement(c, myExecutionPosition));

                case '>':
                case '<':
                case '^':
                case 'v':
                    return(new Position(c, myExecutionPosition));

                case '+':
                case '-':
                case '*':
                    return(new Operation(c, myExecutionPosition));

                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                    return(new Number(c, myExecutionPosition));

                case '"':
                    return(new StartString(myExecutionPosition));

                case 'E':
                    return(new Exit(myExecutionPosition));

                case 'P':
                    return(new Pop());

                case 'D':
                    return(new Duplicate());

                case 'X':
                    return(new Invert());

                default:
                    return(new MyString(c, myExecutionPosition));
                }
            }
        }
Beispiel #3
0
 public Skipper(MyExecutionPosition myExecutionPosition)
 => this.MyExecutionPosition = myExecutionPosition;