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); }
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)); } } }
public Skipper(MyExecutionPosition myExecutionPosition) => this.MyExecutionPosition = myExecutionPosition;