FakturyWeb/Business/ParserFakturaCislo.cs

156 lines
2.8 KiB
C#

using Microsoft.VisualBasic.CompilerServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FakturyWeb.Business
{
/// <summary>
/// Jednoduchý Parser
/// </summary>
/// <remarks></remarks>
public partial class ParserFakturaCislo
{
private string code;
public List<Symbol> logic = new List<Symbol>();
public ParserFakturaCislo(string code)
{
this.code = code;
}
#region Parsing
public void Parse()
{
bool parsingKeySymb = false;
string symb = "";
Symbol logSymb;
foreach (var z in code.ToArray())
{
if (Conversions.ToString(z) == "(")
{
if (parsingKeySymb)
throw new Exception("Chyba parser");
if (!string.IsNullOrWhiteSpace(symb))
{
logSymb = new Symbol(symb); // text
logic.Add(logSymb);
}
symb = "";
parsingKeySymb = true;
}
symb += Conversions.ToString(z);
if (Conversions.ToString(z) == ")" & parsingKeySymb)
{
parsingKeySymb = false;
logSymb = FindSymb(symb);
if (logSymb is null)
throw new Exception("Chyba parser");
logic.Add(logSymb);
symb = "";
}
}
// nokenc ještě:
if (!string.IsNullOrWhiteSpace(symb))
{
logSymb = new Symbol(symb); // text
logic.Add(logSymb);
}
}
#endregion
private Symbol FindSymb(string symb)
{
switch (symb ?? "")
{
case "(CISLO2)":
{
return new Symbol(SymbolEnum.CISLO2);
}
case "(CISLO4)":
{
return new Symbol(SymbolEnum.CISLO4);
}
case "(CISLO6)":
{
return new Symbol(SymbolEnum.CISLO6);
}
case "(MESIC)":
{
return new Symbol(SymbolEnum.MESIC);
}
case "(ROK)":
{
return new Symbol(SymbolEnum.ROK);
}
default:
{
return null;
}
}
}
}
public partial class Symbol
{
private string text;
private SymbolEnum typ;
public SymbolEnum GetTyp
{
get
{
return typ;
}
}
public Symbol(SymbolEnum typ)
{
this.typ = typ;
}
public Symbol(string text)
{
typ = SymbolEnum.TEXT;
this.text = text;
}
public override string ToString()
{
switch (typ)
{
case SymbolEnum.TEXT:
{
return text;
}
default:
{
return typ.ToString();
}
}
}
}
public enum SymbolEnum
{
CISLO2,
CISLO4,
CISLO6,
MESIC,
ROK,
TEXT
}
}