public void RegexTokenize(string value)
        {
            var rx = RegexLexer.Create((symbol, capture) => this.output.WriteLine("{0}({1}): {2}", symbol.ToString(RegexLexer.SymbolNameResolver), capture.Index, capture.AsString()));

            rx.Push(value);
            rx.Push(Utf16Chars.EOF);
        }
        public static RegexExpression Parse(string regex, SymbolId?acceptSymbol, bool ignorePatternWhitespace = true, bool breakOnSlash = false)
        {
            var state = new RegexParser(null, ignorePatternWhitespace, breakOnSlash);

            RegexLexer.Create(state.ProcessTerminal).Push(regex.Append(Utf16Chars.EOF));
            var result = state.Flush();

            return(acceptSymbol.HasValue ? RegexAccept.Create(result, acceptSymbol.Value) : result);
        }