示例#1
0
 private Token NextToken()
 {
     try
     {
         _lastMatch.Clear();
         _stringDfaMatcher.Match(_buffer, _lastMatch);
         _nfaMatcher.Match(_buffer, _lastMatch);
         _regExpMatcher.Match(_buffer, _lastMatch);
         int line;
         int column;
         if (_lastMatch.Length > 0)
         {
             line   = _buffer.LineNumber;
             column = _buffer.ColumnNumber;
             var str = _buffer.Read(_lastMatch.Length);
             return(NewToken(_lastMatch.Pattern, str, line, column));
         }
         else if (_buffer.Peek(0) < 0)
         {
             return(null);
         }
         else
         {
             line   = _buffer.LineNumber;
             column = _buffer.ColumnNumber;
             throw new ParseException(
                       ParseException.ErrorType.UNEXPECTED_CHAR,
                       _buffer.Read(1),
                       line,
                       column);
         }
     }
     catch (IOException e)
     {
         throw new ParseException(ParseException.ErrorType.IO,
                                  e.Message,
                                  -1,
                                  -1);
     }
 }