Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace onpInterpreter
- {
- class Program
- {
- static void Main(string[] args)
- {
- while (true)
- {
- Console.Clear();
- Console.WriteLine("Enter ONP expression: ");
- string expression = Console.ReadLine();
- try
- {
- double result = ONP(expression);
- Console.WriteLine($"Expression value equals {result}.");
- }catch(Exception ex)
- {
- Console.WriteLine($"Error occured: \"{ex.Message}\"");
- }
- Console.WriteLine("Press ESC to close program or any other key to continue...");
- if (Console.ReadKey().Key == ConsoleKey.Escape)
- break;
- }
- }
- static double ONP(string expression)
- {
- if (!string.IsNullOrEmpty(expression))
- {
- List<double> _memoryTower = new List<double>();
- string[] _syntax = expression.Split(' ');
- foreach (var c in _syntax)
- {
- int number;
- if (int.TryParse(c, out number))
- {
- _memoryTower.Add(number);
- }
- else
- {
- switch (c)
- {
- case "+":
- if (_memoryTower.Count > 1)
- {
- _memoryTower.Add(_memoryTower[_memoryTower.Count - 2] + _memoryTower[_memoryTower.Count - 1]);
- _memoryTower.RemoveRange(_memoryTower.Count - 3, 2);
- }
- else
- throw new Exception($"Unexpected {c} in expression!");
- break;
- case "-":
- if (_memoryTower.Count > 1)
- {
- _memoryTower.Add(_memoryTower[_memoryTower.Count - 2] - _memoryTower[_memoryTower.Count - 1]);
- _memoryTower.RemoveRange(_memoryTower.Count - 3, 2);
- }
- else
- throw new Exception($"Unexpected {c} in expression!");
- break;
- case "*":
- if (_memoryTower.Count > 1)
- {
- _memoryTower.Add(_memoryTower[_memoryTower.Count - 2] * _memoryTower[_memoryTower.Count - 1]);
- _memoryTower.RemoveRange(_memoryTower.Count - 3, 2);
- }
- else
- throw new Exception($"Unexpected {c} in expression!");
- break;
- case "/":
- if (_memoryTower.Count > 1)
- {
- _memoryTower.Add(_memoryTower[_memoryTower.Count - 2] / _memoryTower[_memoryTower.Count - 1]);
- _memoryTower.RemoveRange(_memoryTower.Count - 3, 2);
- }
- else
- throw new Exception($"Unexpected {c} in expression!");
- break;
- case "^":
- if (_memoryTower.Count > 1)
- {
- _memoryTower.Add(System.Math.Pow(_memoryTower[_memoryTower.Count - 2], _memoryTower[_memoryTower.Count - 1]));
- _memoryTower.RemoveRange(_memoryTower.Count - 3, 2);
- }
- else
- throw new Exception($"Unexpected {c} in expression!");
- break;
- default:
- throw new Exception($"Unexpected {c} in expression!");
- }
- }
- }
- if (_memoryTower.Count == 1)
- return _memoryTower[0];
- }
- throw new Exception("ONP expression in not valid!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment