public void AddExpression(string name, string regex) { using (var stream = new StringReader(InfixToPostfix.Convert(regex))) { while (stream.Peek() != -1) { var c = (char)stream.Read(); switch (c) { case '.': _stack.Concatenate(); break; case '|': _stack.Unite(); break; case '*': _stack.Iterate(); break; case '+': _stack.AtLeast(); break; case '?': _stack.Maybe(); break; default: var a = new NFA <char>(); a.AddTransition(a.Start, new State(), c == '\\' ? Escape((char)stream.Read()) : c); _stack.Push(a); break; } } var top = _stack.Peek(); top.LastAdded.Final = true; top.SetName(top.LastAdded, name); } }