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; }
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"); } }