public string Parse(string text, GetValueForKeyFunc getValueForKeyFunc)
        {
            using (var reader = new StringReader(text))
            {
                var parser = new NamedFieldParser(getValueForKeyFunc);

                do
                {
                    parser.Current = reader.Read();

                    switch (parser.State)
                    {
                    case ParsingState.Text:
                        HandleRegularCharacter(parser);
                        break;

                    case ParsingState.StartOfExpression:
                        HandleStartOfExpression(parser);
                        break;

                    case ParsingState.Expression:
                        HandleFieldExpression(parser);
                        break;

                    case ParsingState.EndOfExpression:
                        HandleEndOfExpression(parser);
                        break;
                    }
                } while (parser.State != ParsingState.EndOfFile);

                return(parser.FormattedText.ToString());
            }
        }
 public NamedFieldParser(GetValueForKeyFunc func)
 {
     _current           = NoMoreText;
     Position           = -1;
     State              = ParsingState.Text;
     GetValueForKeyFunc = func;
 }