예제 #1
0
        public ProgramState Execute(ProgramState programState)
        {
            MyIDictionary <string, int> symbolTable = programState.SymbolTable;

            int value = expression.Evaluate(symbolTable);

            if (symbolTable.ContainsKey(id))
            {
                symbolTable.Update(id, value);
            }
            else
            {
                symbolTable.Add(id, value);
            }

            return(programState);
        }
예제 #2
0
        public ProgramState Execute(ProgramState programState)
        {
            MyIDictionary <string, int> symbolTable = programState.SymbolTable;

            int fileDescriptor = expFileId.Evaluate(symbolTable);

            if (!programState.FileTable.TryGetValue(fileDescriptor, out Tuple <string, TextReader> value))
            {
                throw new StatementException("Invalid file id provided!");
            }

            TextReader reader = value.Item2;
            string     line;

            try
            {
                line = reader.ReadLine();
            }catch (Exception)
            {
                throw new StatementException("Error while reading from file!");
            }

            int intValue = 0;

            if (line != null && !int.TryParse(line, out intValue))
            {
                throw new StatementException("File contains non-numeric values!");
            }

            if (symbolTable.ContainsKey(varName))
            {
                symbolTable.Update(varName, intValue);
            }
            else
            {
                symbolTable.Add(varName, intValue);
            }

            return(programState);
        }