public virtual IToken LT( int k )
{
if ( p == -1 )
{
FillBuffer();
}
if ( k == 0 )
{
return null;
}
if ( k < 0 )
{
return LB( -k );
}
//System.out.print("LT(p="+p+","+k+")=");
if ( ( p + k - 1 ) >= tokens.Count )
{
return tokens[tokens.Count - 1];
}
//System.out.println(tokens.get(p+k-1));
int i = p;
int n = 1;
// find k good tokens
while ( n < k )
{
// skip off-channel tokens
i = SkipOffTokenChannels( i + 1 ); // leave p on valid token
n++;
}
if ( i >= tokens.Count )
{
return tokens[tokens.Count - 1];
}
if (i > Range)
Range = i;
return (IToken)tokens[i];
}