public virtual IToken NextToken() { if (tokens.Count > 0) return tokens.Dequeue(); return NextTokenImpl(); }