/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef ADC_TKP2_HXX
#define ADC_TKP2_HXX

// USED SERVICES
	// BASE CLASSES
	// COMPONENTS
class CharacterSource;
class TkpContext;
	// PARAMETRS



/** This is the interface for parser classes, which get a sequence of Token s from
	a text.

	Start() starts to parse the text from the given i_rSource.
	GetNextToken() returns a Token on the heap as long as there are
	still characters in the text left. The last time GetNextToken()
	returns NULL.

	The algorithms for parsing tokens from the text are an issue of
	the derived classes.
*/
class TokenParse2
{
  public:
	// LIFECYCLE
						TokenParse2();
	virtual				~TokenParse2() {}

	// OPERATIONS
	virtual void   		Start(
							CharacterSource &
											i_rSource );

	/** @short	Gets the next identifiable token out of the
		source code.
		@return true, if there was passed a valid token.
				false, if the parsed stream is finished or
                	   an error occurred.	
	*/
	bool				GetNextToken();

  private:
	virtual void		SetStartContext() = 0;
	virtual void        SetCurrentContext(
							TkpContext &		io_rContext ) = 0;
	virtual TkpContext &
						CurrentContext() = 0;
	// DATA
	CharacterSource *	pChars;
};


#endif


