public Token Next() { if (savedToken != null) { Token s = savedToken; savedToken = null; return s; } Token t = NextInternal(); if (last != null && IsElementOrExprStart(t) && IsElement(last)) { savedToken = t; last = t; return new Token(TokenKind.And, t.Offset - 1); } last = t; return t; }
bool IsElementOrExprStart(Token t) { return IsElement(t) || t.Kind == TokenKind.OpenParen || t.Kind == TokenKind.Not; }
bool IsElement(Token t) { return t.Kind == TokenKind.Term || t.Kind == TokenKind.Phrase; }