Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using Translatory.Models;
- namespace Translatory.Controllers
- {
- public sealed class TranslateController
- {
- //Text
- private readonly string _text;
- //State
- private TranslateState _state;
- //Constructor
- public TranslateController(string text)
- {
- _text = text;
- _state = TranslateState.Normal;
- Analize();
- }
- public void Analize()
- {
- var idCombo = string.Empty;
- var numberCombo = string.Empty;
- var errorCombo = string.Empty;
- foreach (var sign in _text.Select((value, index) => new { value, index }))
- {
- //White space
- if (char.IsWhiteSpace(sign.value)) continue;
- //Check plus
- if (sign.value == '+' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Plus(+)");
- //Check minus
- else if (sign.value == '-' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Minus(-)");
- //Check multiply
- else if (sign.value == '*' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Multiply(*)");
- //Check divide
- else if (sign.value == '/' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Divide(/)");
- //Left bracket
- else if (sign.value == '(' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Left bracket(()");
- //Right bracket
- else if (sign.value == ')' && _state == TranslateState.Normal) Console.WriteLine($"{sign.index + 1} -> Right bracket())");
- //ID
- else if (char.IsLetter(sign.value) || _state == TranslateState.ID)
- {
- _state = TranslateState.ID;
- idCombo += sign.value;
- if (sign.index == _text.Length - 1 || !char.IsLetterOrDigit(_text[sign.index + 1]))
- {
- Console.WriteLine($"{sign.index + 1} -> ID({idCombo})");
- _state = TranslateState.Normal;
- numberCombo = string.Empty;
- }
- }
- else if (char.IsNumber(sign.value) || _state == TranslateState.Number)
- {
- _state = TranslateState.Number;
- numberCombo += sign.value;
- if(sign.index < _text.Length - 2 && _text[sign.index + 1] == '.' && char.IsNumber(_text[sign.index + 2]) && numberCombo.Count(x=>x == '.') == 0) continue;
- if (sign.index == _text.Length - 1 || !char.IsNumber(_text[sign.index + 1]) )
- {
- if (numberCombo.Contains("."))
- Console.WriteLine($"{sign.index + 1} -> FLOAT({numberCombo})");
- else
- Console.WriteLine($"{sign.index + 1} -> INT({numberCombo})");
- _state = TranslateState.Normal;
- numberCombo = string.Empty;
- }
- }
- else if (!char.IsLetterOrDigit(sign.value) || _state == TranslateState.Error)
- {
- _state = TranslateState.Error;
- errorCombo += sign.value;
- 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] == ')')
- {
- Console.WriteLine($"{sign.index + 1} -> ERROR({errorCombo})");
- _state = TranslateState.Normal;
- errorCombo = string.Empty;
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement