// Definitions of documentation groups so we can organize the API and
// usage documentation nicely.

/// \defgroup apiclasses API Classes
///
/// The API classes are divided into the typdefs (and their underlying structs)
/// that are the containers for each 'object' within the ANTLR3C runtime, and
/// their implementations (the functions that are installed by default in to
/// these structures when you create them.)
///
/// The typedefs contain data and function pointers, which together define
/// the object. The implementation functions are the default implementations
/// of the 'methds' encapsulated by the typdef structures.You may override 
/// any of the methods once their objects are created by installing a pointer to 
/// your own function. Some of these methods create other 'objects' (instances of
/// typedef structures), which allows you install your own method and create your
/// own implementation of these.
///

	/// \defgroup apistructures API Typedefs and Structs
	/// \ingroup apiclasses
	///
	/// These structures (and the typedefs that you use to reference them
	/// and their pointers) are the C equivalent of objects. They correspond
	/// (roughly) to the Java runtime system classes and contain all the
	/// data elements for a particular interface as well as all the pointers
	/// to functions that implement these interfaces.
	///
	/// There are constructor functions exported from the C runtime, which you
	/// use to create a default implementation of one of these 'classes'. You can
	/// then override any part of the implementation by installing your own
	/// function pointers, before using the interface 'object' you have created.
	///
	/// For instance, you can override the default error message reporting function
	/// by replacing the standard (example) implementation of this function with
	/// your own. In your grammar, you would place the following
	///
	/// \code
	/// @parser::apifuncs
	/// {
	///    // Install custom error message display
	///    //
	///    RECOGNIZER->displayRecognitionError = produceError;
	/// }
	/// \endcode
	///
	/// The special section @parser::apiFuncs is guaranteed to be generated after
	/// the RECONGIZER 'object' has already be created and initialized, so you may
	/// install your own implementations of the #ANTLR3_BASE_RECOGNIZER interface
	/// functions. The error display function is likely to be the only one you are
	/// interested in replacing.
	///
	/// Some typedef structures contain either pointers to 'inherited' objects (usual)
	/// or embedded structures/typedefs (unusual). In some cases, the pointers passed
	/// around by the paresr or tree parser are actually the pointers to these embedded
	/// structures (such as #pANTLR3_BASE_TREE), and these embedded 'objects' contain
	/// pointers to their encapsulating objects. This is the equivalent of passing
	/// interface objects around in object oriented languages.
	///
	
		/// \defgroup ANTLR3_BASE_RECOGNIZER ANTLR3_BASE_RECOGNIZER - Base Recognizer Class Definition
		/// \ingroup apistructures
		///
		/// This is the definition of the base recognizer interface, instantiations
		/// of which are referred to via #pANTLR3_BASE_RECOGNIZER.
		///
		/// In general you will not refer to one of these structures directly as a
		/// a #pANTLR3_BASE_RECOGNIZER will be embedded within a higher level
		/// object such as #pANTLR3_PARSER
		///
		/// \defgroup ANTLR3_RECOGNIZER_SHARED_STATE ANTLR3_RECOGNIZER_SHARED_STATE Recognizer Shared State Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_BITSET	ANTLR3_BITSET - Bitset Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_TOKEN_FACTORY ANTLR3_TOKEN_FACTORY - Token Factory Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_COMMON_TOKEN ANTLR3_COMMON_TOKEN - Common Token Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_EXCEPTION ANTLR3_EXCEPTION - Exception Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_HASH_BUCKET ANTLR3_HASH_BUCKET - Hash Table Bucket Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_HASH_ENTRY ANTLR3_HASH_ENTRY - Hash Table Entry Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_HASH_ENUM ANTLR3_HASH_ENUM - Hash Table Enumerator Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_HASH_TABLE ANTLR3_HASH_TABLE - Hash Table Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_LIST ANTLR3_LIST - List Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_VECTOR_FACTORY ANTLR3_VECTOR_FACTORY - Vector Factory Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_VECTOR ANTLR3_VECTOR - Vector Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_STACK ANTLR3_STACK - Stack Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_INPUT_STREAM ANTLR3_INPUT_STREAM - Input Stream Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_LEX_STATE ANTLR3_LEX_STATE - Lexer State Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_STRING_FACTORY ANTLR3_STRING_FACTORY - String Factory Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_STRING ANTLR3_STRING - String Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_TOKEN_SOURCE ANTLR3_TOKEN_SOURCE - Token Source Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_TOKEN_STREAM ANTLR3_TOKEN_STREAM - Token Stream Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_COMMON_TOKEN_STREAM ANTLR3_COMMON_TOKEN_STREAM - Common Token Stream Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_CYCLIC_DFA ANTLR3_CYCLIC_DFA - Cyclic DFA Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_LEXER ANTLR3_LEXER - Lexer Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_PARSER ANTLR3_PARSER - Parser Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_BASE_TREE ANTLR3_BASE_TREE - Base Tree Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_COMMON_TREE ANTLR3_COMMON_TREE - Common Tree Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_ARBORETUM ANTLR3_ARBORETUM - Tree Factory Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_PARSE_TREE ANTLR3_PARSE_TREE - Parse Tree Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_TREE_NODE_STREAM ANTLR3_TREE_NODE_STREAM - Tree Node Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_COMMON_TREE_NODE_STREAM ANTLR3_COMMON_TREE_NODE_STREAM - Common Tree Node Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_TREE_WALK_STATE ANTLR3_TREE_WALK_STATE - Tree Walk State Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_BASE_TREE_ADAPTOR ANTLR3_BASE_TREE_ADAPTOR - Base Tree Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_COMMON_TREE_ADAPTOR ANTLR3_COMMON_TREE_ADAPTOR - Common Tree Adaptor Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_TREE_PARSER ANTLR3_TREE_PARSER - Tree Parser Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_INT_TRIE ANTLR3_INT_TRIE - Trie Class Definition
		/// \ingroup apistructures
		/// \defgroup ANTLR3_REWRITE_RULE_ELEMENT_STREAM ANTLR3_REWRITE_RULE_ELEMENT_STREAM - Token Rewrite Stream Class Definition
		/// \ingroup apistructures
  		/// \defgroup ANTLR3_DEBUG_EVENT_LISTENER ANTLR3_DEBUG_EVENT_LISTENER - Debugger Class Definition
		/// \ingroup apistructures
  
	/// \defgroup apiimplementations API Implementation functions
	/// \ingroup apiclasses
	///
	/// API implementation functions are the default implementation of each of the
	/// methods in a particular typedef structure. 
	///
	/// They are generally grouped together in the same source code file. 
	/// For instance the default implementations of the
	/// methods contained by a #pANTLR3_BASE_RECOGNIZER will be found in the file
	/// antlr3baserecognizer.c
	///
	/// A source file that provides the default implementations of functions will usually
	/// also supply the public (exported from the .DLL or code library) 'constructor' functions
	/// that create and initialize the typedef structure that they implement. For instance,
	/// in the antlr3baserecognizer.c file, you will find the function antlr3BaseRecognizerNew()
	///

		/// \defgroup pANTLR3_BASE_RECOGNIZER pANTLR3_BASE_RECOGNIZER Base Recognizer Implementation
		/// \ingroup apiimplementations
		///
		/// The base recognizer interface is implemented by all higher level recognizers
		/// such as #pANTLR3_PARSER and provides methods common to all recognizers.
		///
		/// \defgroup pANTLR3_RECOGNIZER_SHARED_STATE pANTLR3_RECOGNIZER_SHARED_STATE - Recognizer Shared State Implementation
		/// \ingroup apiimplementations
		///
		/// The recognizer shared state class does not have an implementation because it contains only
		/// data fields, documented at #ANTLR3_RECOGNIZER_SHARED_STATE
		///
		/// \defgroup pANTLR3_BITSET pANTLR3_BITSET - Bitset Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_TOKEN_FACTORY pANTLR3_TOKEN_FACTORY - Token Factory Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_COMMON_TOKEN pANTLR3_COMMON_TOKEN - Common Token Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_EXCEPTION	pANTLR3_EXCEPTION - Exception Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_HASH_BUCKET pANTLR3_HASH_BUCKET - Hash Table Bucket Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_HASH_ENTRY pANTLR3_HASH_ENTRY - Hash Table Entry Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_HASH_ENUM pANTLR3_HASH_ENUM - Hash Table Enumerator Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_HASH_TABLE pANTLR3_HASH_TABLE - Hash Table Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_LIST pANTLR3_LIST - List Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_VECTOR_FACTORY pANTLR3_VECTOR_FACTORY - Vector Factory Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_VECTOR pANTLR3_VECTOR - Vector Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_STACK pANTLR3_STACK - Stack Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_INPUT_STREAM pANTLR3_INPUT_STREAM - Input Stream Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_LEX_STATE pANTLR3_LEX_STATE - Lexer State Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_STRING_FACTORY pANTLR3_STRING_FACTORY - String Factory Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_STRING pANTLR3_STRING - String Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_TOKEN_SOURCE pANTLR3_TOKEN_SOURCE - Token Source Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_TOKEN_STREAM pANTLR3_TOKEN_STREAM - Token Stream Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_COMMON_TOKEN_STREAM pANTLR3_COMMON_TOKEN_STREAM - Common Token Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_CYCLIC_DFA pANTLR3_CYCLIC_DFA - Cyclic DFA Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_LEXER pANTLR3_LEXER - Lexer Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_PARSER pANTLR3_PARSER - Parser Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_BASE_TREE pANTLR3_BASE_TREE - Base Tree Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_COMMON_TREE pANTLR3_COMMON_TREE - Common Tree Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_ARBORETUM pANTLR3_ARBORETUM - Tree Factory Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_PARSE_TREE pANTLR3_PARSE_TREE - Parse Tree Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_TREE_NODE_STREAM pANTLR3_TREE_NODE_STREAM - Tree Node Stream Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_COMMON_TREE_NODE_STREAM pANTLR3_COMMON_TREE_NODE_STREAM - Common Tree Node Stream Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_TREE_WALK_STATE pANTLR3_TREE_WALK_STATE - Tree Walk State Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_BASE_TREE_ADAPTOR pANTLR3_BASE_TREE_ADAPTOR - Base Tree Adaptor Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_COMMON_TREE_ADAPTOR pANTLR3_COMMON_TREE_ADAPTOR - Common Tree Adaptor Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_TREE_PARSER pANTLR3_TREE_PARSER - Tree ParserImplementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_INT_TRIE pANTLR3_INT_TRIE - Trie Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_REWRITE_RULE_ELEMENT_STREAM pANTLR3_REWRITE_RULE_ELEMENT_STREAM - Token Rewrite Stream Implementation
		/// \ingroup apiimplementations
		/// \defgroup pANTLR3_DEBUG_EVENT_LISTENER pANTLR3_DEBUG_EVENT_LISTENER - Debugger Implementation
		/// \ingroup apiimplementations
		