Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace KizhiPart1
- {
- public static class Hello
- {
- public static void Main()
- {
- Console.OutputEncoding = Encoding.UTF8;
- TextWriter writer = new StringWriter();
- var interpreter = new Interpreter(writer);
- interpreter.ExecuteLine("set a 5");
- interpreter.ExecuteLine("set a 6");
- interpreter.ExecuteLine("print a");
- Console.Read();
- }
- }
- public class Interpreter
- {
- public TextWriter _writer;
- private readonly Dictionary<string, int> _variables;
- private readonly Queue<string> _output;
- private readonly string pattern = @"^([a-zA-Z]+|)$";
- public Interpreter(TextWriter writer)
- {
- _variables = new Dictionary<string, int>();
- _output = new Queue<string>();
- _writer = writer;
- }
- public void ExecuteLine(string command)
- {
- _writer = new StringWriter();
- var sequence = command.Split(' ');
- if (sequence.Length > 3 || sequence.Length < 2)
- {
- _output.Clear();
- _writer.Write($"Неизвестная команда: ");
- foreach (var item in sequence)
- {
- _writer.Write(item + ' ');
- }
- _writer.WriteLine();
- return;
- }
- else if (sequence.Length == 3)
- {
- bool success = int.TryParse(sequence[2], out int value);
- if (Regex.IsMatch(sequence[1], pattern) && success && value > 0)
- {
- if (sequence[0] == "set")
- {
- if (!_variables.ContainsKey(sequence[1]))
- {
- _variables.Add(sequence[1], value);
- return;
- }
- else
- {
- _variables[sequence[1]] = value;
- return;
- }
- }
- else if (sequence[0] == "sub")
- {
- if (_variables.ContainsKey(sequence[1]))
- {
- if (_variables[sequence[1]] - value > 0)
- {
- _variables[sequence[1]] -= value;
- return;
- }
- else
- {
- _output.Clear();
- _writer.WriteLine("Результат операции sub должен быть натуральным числом");
- return;
- }
- }
- else
- {
- _output.Clear();
- _writer.WriteLine("Переменная отсутствует в памяти");
- return;
- }
- }
- else
- {
- _output.Clear();
- _writer.Write($"Неизвестная команда: ");
- foreach (var item in sequence)
- {
- _writer.Write(item + ' ');
- }
- _writer.WriteLine();
- return;
- }
- }
- else
- {
- _output.Clear();
- _writer.Write($"Неизвестная команда: ");
- foreach (var item in sequence)
- {
- _writer.Write(item + ' ');
- }
- _writer.WriteLine();
- return;
- }
- }
- else if (sequence.Length == 2)
- {
- if (Regex.IsMatch(sequence[1], pattern))
- {
- if (sequence[0] == "print")
- {
- if (_variables.ContainsKey(sequence[1]))
- {
- _output.Enqueue(_variables[sequence[1]].ToString());
- }
- else
- {
- _output.Clear();
- _writer.WriteLine("Переменная отсутствует в памяти");
- return;
- }
- }
- else if (sequence[0] == "rem")
- {
- if (_variables.ContainsKey(sequence[1]))
- {
- _variables.Remove(sequence[1]);
- return;
- }
- else
- {
- _output.Clear();
- _writer.WriteLine("Переменная отсутствует в памяти");
- return;
- }
- }
- }
- else
- {
- _output.Clear();
- _writer.Write($"Неизвестная команда: ");
- foreach (var item in sequence)
- {
- _writer.Write(item + ' ');
- }
- _writer.WriteLine();
- return;
- }
- }
- foreach (var item in _output)
- {
- _writer.WriteLine(item);
- }
- _output.Clear();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment