public ProgramState(ExecutionStack <Statement> executionStack,
                     SymbolTable <string, int> symbolTable,
                     FileTable <int, FileData <string, StreamReader> > fileTable,
                     FileDescriptorGenerator generator,
                     Output <string> output)
 {
     this.executionStack = executionStack;
     this.symbolTable    = symbolTable;
     this.fileTable      = fileTable;
     this.generator      = generator;
     this.output         = output;
 }
Beispiel #2
0
        public ProgramState execute(ProgramState programState)
        {
            try
            {
                checkIfFileNameWasNotUsedOrThrowException(programState);

                StreamReader            bufferedReader = new StreamReader(filename);
                FileDescriptorGenerator generator      = programState.getFileDescriptorGenerator();
                int descriptor = generator.next();

                SymbolTable <string, int> symbolTable = programState.getSymbolTable();
                symbolTable.add(variable, descriptor);

                FileTable <int, FileData <string, StreamReader> > fileTable = programState.getFileTable();
                fileTable.add(descriptor, new FileData <string, StreamReader>(filename, bufferedReader));

                return(programState);
            }
            catch (IOException)
            {
                throw new InterpreterException("error: file could not be open");
            }
        }