addToken(info,0,Token.END);
	public LineInfo markTokens(Segment line, int lineIndex)	{		if(lineIndex >= length)		{			throw new IllegalArgumentException("Tokenizing invalid line: "				+ lineIndex);		}		LineInfo info = lineInfo[lineIndex];		/* If cached tokens are valid, return 'em */		if(info.tokensValid)			return info;		/* Otherwise, prepare for tokenization */		info.lastToken = null;		LineInfo prev;		if(lineIndex == 0)			prev = null;		else			prev = lineInfo[lineIndex - 1];		ParserRule oldRule = info.context.inRule;		LineContext oldParent = info.context.parent;		markTokensImpl(line,prev,info);		ParserRule newRule = info.context.inRule;		LineContext newParent = info.context.parent;		info.tokensValid = true;		if(lineIndex != lastTokenizedLine)		{			nextLineRequested = false;			lastTokenizedLine = lineIndex;		}		nextLineRequested |= (oldRule != newRule || oldParent != newParent);		if(nextLineRequested && length - lineIndex > 1)		{			linesChanged(lineIndex + 1,length - lineIndex - 1);		}		addToken(info,0,Token.END);		return info;	}