isotonicq

Translator

Apr 6th, 2018
172
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Linq;
  3. using Translatory.Models;
  4.  
  5. namespace Translatory.Controllers
  6. {
  7.     public sealed class TranslateController
  8.     {
  9.         //Text  
  10.         private readonly string _text;
  11.  
  12.         //State
  13.         private TranslateState _state;
  14.  
  15.         //Constructor
  16.         public TranslateController(string text)
  17.         {
  18.             _text = text;
  19.             _state = TranslateState.Normal;
  20.             Analize();
  21.         }
  22.  
  23.         public void Analize()
  24.         {
  25.             var idCombo = string.Empty;
  26.             var numberCombo = string.Empty;
  27.             var errorCombo = string.Empty;
  28.  
  29.             foreach (var sign in _text.Select((value, index) => new { value, index }))
  30.             {
  31.                 //White space
  32.                 if (char.IsWhiteSpace(sign.value)) continue;
  33.  
  34.                 //Check plus
  35.                 if (sign.value == '+' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Plus(+)");
  36.  
  37.                 //Check minus
  38.                 else if (sign.value == '-' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Minus(-)");
  39.  
  40.                 //Check multiply
  41.                 else if (sign.value == '*' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Multiply(*)");
  42.  
  43.                 //Check divide
  44.                 else if (sign.value == '/' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Divide(/)");
  45.  
  46.                 //Left bracket
  47.                 else if (sign.value == '(' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Left bracket(()");
  48.  
  49.                 //Right bracket
  50.                 else if (sign.value == ')' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Right bracket())");
  51.  
  52.                 //ID
  53.                 else if (char.IsLetter(sign.value) || _state == TranslateState.ID)
  54.                 {
  55.                     _state = TranslateState.ID;
  56.  
  57.                     idCombo += sign.value;
  58.  
  59.                     if (sign.index == _text.Length - 1 || !char.IsLetterOrDigit(_text[sign.index + 1]))
  60.                     {
  61.                         Console.WriteLine($"{sign.index + 1} -> ID({idCombo})");
  62.                         _state = TranslateState.Normal;
  63.                         numberCombo = string.Empty;
  64.                     }
  65.                 }
  66.  
  67.                 else if (char.IsNumber(sign.value) || _state == TranslateState.Number)
  68.                 {
  69.                     _state = TranslateState.Number;
  70.  
  71.                     numberCombo += sign.value;
  72.  
  73.                     if(sign.index < _text.Length - 2 && _text[sign.index + 1] == '.' && char.IsNumber(_text[sign.index + 2]) && numberCombo.Count(x=>x == '.') == 0) continue;
  74.  
  75.                     if (sign.index == _text.Length - 1 || !char.IsNumber(_text[sign.index + 1]) )
  76.                     {
  77.                         if (numberCombo.Contains("."))
  78.                             Console.WriteLine($"{sign.index + 1} -> FLOAT({numberCombo})");
  79.                         else
  80.                             Console.WriteLine($"{sign.index + 1} -> INT({numberCombo})");
  81.  
  82.                         _state = TranslateState.Normal;
  83.                         numberCombo = string.Empty;
  84.                     }
  85.                 }
  86.  
  87.                 else if (!char.IsLetterOrDigit(sign.value) || _state == TranslateState.Error)
  88.                 {
  89.                     _state = TranslateState.Error;
  90.  
  91.                     errorCombo += sign.value;
  92.  
  93.                     if (sign.index == _text.Length - 1 || char.IsLetterOrDigit(_text[sign.index + 1]) || _text[sign.index + 1] == '+' || _text[sign.index + 1] == '-' || _text[sign.index + 1] == '*' || _text[sign.index + 1] == '/' || _text[sign.index + 1] == '(' || _text[sign.index + 1] == ')')
  94.                     {
  95.                         Console.WriteLine($"{sign.index + 1} -> ERROR({errorCombo})");
  96.                         _state = TranslateState.Normal;
  97.                         errorCombo = string.Empty;
  98.                     }
  99.                 }
  100.             }
  101.         }
  102.     }
  103. }
RAW Paste Data