/* ANTLRTokenStream.h
 *
 * SOFTWARE RIGHTS
 *
 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
 * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
 * company may do whatever they wish with source code distributed with
 * PCCTS or the code generated by PCCTS, including the incorporation of
 * PCCTS, or its output, into commerical software.
 *
 * We encourage users to develop software with PCCTS.  However, we do ask
 * that credit is given to us for developing PCCTS.  By "credit",
 * we mean that if you incorporate our source code into one of your
 * programs (commercial product, research project, or otherwise) that you
 * acknowledge this fact somewhere in the documentation, research report,
 * etc...  If you like PCCTS and have developed a nice tool with the
 * output, please mention that you developed it using PCCTS.  In
 * addition, we ask that this header remain intact in our source code.
 * As long as these guidelines are kept, we expect to continue enhancing
 * this system and expect to make other tools available as they are
 * completed.
 *
 * ANTLR 1.33
 * Terence Parr
 * Parr Research Corporation
 * with Purdue University and AHPCRC, University of Minnesota
 * 1989-2000
 */

#ifndef ATOKENSTREAM_H_GATE
#define ATOKENSTREAM_H_GATE

#include "pcctscfg.h"

/* This is really a behavior or protocol; it merely indicates the behavior
 * required of the input and output of an ANTLRTokenBuffer.  You could
 * subclass it, but you can also just pass any old pointer to ANTLRTokenBuffer
 * with a type cast (in which case, your getANTLRToken() would have to
 * explicitly cast the input pointer to your REAL type (typically your lexer)).
 */

class ANTLRParser;							// MR1

class DllExportPCCTS ANTLRTokenStream {
public:
    virtual _ANTLRTokenPtr getToken() = 0;
	virtual ANTLRParser * setParser(ANTLRParser * /*p MR23*/) {return 0; };   // MR12
	virtual ANTLRParser * getParser() { return 0; };		        // MR12
};

#endif
