コード例 #1
0
ファイル: Runner.cs プロジェクト: pvdstel/bfng
        static void Run(RunOptions options)
        {
            VerifyFileExists(options.File);

            string programString = null;

            TimeAction(() => programString = File.ReadAllText(options.File), options.PrintTiming, "Read source file in {0} ms.");

            Lexer             lexer             = new Lexer(options.ProgramWidth, options.ProgramHeight);
            ExpressionProgram expressionProgram = null;

            TimeAction(() => expressionProgram = lexer.Lex(programString), options.PrintTiming, "Performed lexing in {0} ms.");

            InstructionProgram instructionProgram = null;

            TimeAction(() => instructionProgram = new InstructionProgram(expressionProgram), options.PrintTiming, "Performed parsing in {0} ms.");

            Interpreter interpreter;

            if (options.DisableInterpreterOutput)
            {
                interpreter = new Interpreter(new NoOutputEnvironment());
            }
            else
            {
                interpreter = new Interpreter();
            }
            TimeAction(() => interpreter.Execute(instructionProgram), options.PrintTiming, "Executed program in {0} ms.");
        }
コード例 #2
0
ファイル: ExecutionContext.cs プロジェクト: pvdstel/bfng
        public ExecutionContext(InstructionProgram program)
        {
            Program             = program;
            MutatedInstructions = new Instruction[program.Width, program.Height];
            MutatedExpressions  = new char?[program.Width, program.Height];
            Stack = new Stack <int>();

            IsRunning          = true;
            ExecutionDirection = ExecutionDirection.Right;
            InstructionPointer = new InstructionPointer(0, 0);
        }
コード例 #3
0
ファイル: Interpreter.cs プロジェクト: pvdstel/bfng
        public void Execute(InstructionProgram program)
        {
            ExecutionContext context = new ExecutionContext(program);

            while (context.IsRunning)
            {
                Instruction currentInstruction = context.GetCurrentInstruction();
                currentInstruction(context, _environment);
                context.AdvanceInstructionPointer();
            }

            Console.WriteLine();
        }