예제 #1
0
        public PrgState execute(PrgState state)
        {
            IStack <IStmt> newStk = new ArrayStack <IStmt>();

            newStk.Push(forkStmt);
            IDictionary <String, int> newDict = new ArrayDictionary <String, int>(
                (ArrayDictionary <String, int>)state.getSymTable()
                );

            return(new PrgState(newStk, newDict, state.getOut(), state.getHeap(), (state.getId() + 1) * 10));
        }
예제 #2
0
        private void addProgram()
        {
            IStmt st1 = new AssignStmt("v", new ConstExp(10));
            IStmt st2 = new NewStmt("a", new ConstExp(22));
            IStmt st3 = new AssignStmt("v", new ConstExp(32));
            IStmt st4 = new PrintStmt(new VarExp("v"));
            IStmt st5 = new PrintStmt(new ReadHeapExp("a"));
            IStmt st8 = new ForkStmt(new CmpStmt(new WriteHeapStmt("a", new ConstExp(30)),
                                                 new CmpStmt(st3, new CmpStmt(st4, st5))));
            IStmt st6     = new PrintStmt(new VarExp("v"));
            IStmt st7     = new PrintStmt(new ReadHeapExp("a"));
            IStmt prgStmt = new CmpStmt(st1, new CmpStmt(st2,
                                                         new CmpStmt(st8, new CmpStmt(st6, st7))));
            //IStmt prgStmt = addNewStmt();
            IStack <IStmt>            exeStk = new ArrayStack <IStmt>();
            IDictionary <String, int> tbl    = new ArrayDictionary <String, int>();
            IList <int> outl = new ArrayList <int>();
            IHeap <int> h    = new MyHeap <int>();

            exeStk.Push(prgStmt);

            PrgState crtPrg = new PrgState(exeStk, tbl, outl, h);

            ctrl.addPrgState(crtPrg);
            ctrl.repoSer();

            try {
                mainMenu();
            } catch (ControllerException) {
                Console.WriteLine("Step evaluation error.");
            } catch (RepositoryException) {
                Console.WriteLine("Program state error.");
            } catch (ConsoleException) {
                Console.WriteLine("Wrong option. Try again.");
            }
        }
예제 #3
0
 public ArrayDictionary(ArrayDictionary <K, V> oldDict)
 {
     elements = new Dictionary <K, V> (oldDict.elements);
 }