private static string buildMessage(TextBuffer textBuffer, string errorDescription, bool undoLastRead)
        {
            if (undoLastRead)
                textBuffer.UndoRead();

            WordToken wordToken = TokenReader.ReadWordToken(textBuffer);

            int arrowsIndex = textBuffer.PreviousIndex + textBuffer.LastRead.Length - wordToken.Name.Length;
            string arrowsLine = Regex.Replace(textBuffer.Text.Substring(0, arrowsIndex), @"\S", " ", RegexOptions.Singleline);

            return string.Format("{0}\n{1}\n{2}", errorDescription, textBuffer.Text, arrowsLine + new string('^', wordToken.Name.Length));
        }
        public override Token ReadToken(TextBuffer textBuffer)
        {
            string firstMatchGroup = GetFirstMatchGroup(textBuffer);

            if (firstMatchGroup != null)
            {
                int value;
                if (int.TryParse(firstMatchGroup, out value))
                    return new SignedIntegerToken(value);
                else
                    textBuffer.UndoRead();
            }

            return null;
        }
        public override Token ReadToken(TextBuffer textBuffer)
        {
            string firstMatchGroup = GetFirstMatchGroup(textBuffer);

            if (firstMatchGroup != null)
            {
                int value;
                if (int.TryParse(firstMatchGroup, out value))
                {
                    return(new SignedIntegerToken(value));
                }
                else
                {
                    textBuffer.UndoRead();
                }
            }

            return(null);
        }