Пример #1
0
        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);
            }
        }