1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** \file 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Defines the basic structure to support recognizing by either a lexer, 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * parser, or tree parser. 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * \addtogroup ANTLR3_BASE_RECOGNIZER 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @{ 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef _ANTLR3_BASERECOGNIZER_H 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define _ANTLR3_BASERECOGNIZER_H 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// [The "BSD licence"] 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://www.temporal-wave.com 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://www.linkedin.com/in/jimidle 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// All rights reserved. 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Redistribution and use in source and binary forms, with or without 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// modification, are permitted provided that the following conditions 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// are met: 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 1. Redistributions of source code must retain the above copyright 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// notice, this list of conditions and the following disclaimer. 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 2. Redistributions in binary form must reproduce the above copyright 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// notice, this list of conditions and the following disclaimer in the 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// documentation and/or other materials provided with the distribution. 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3. The name of the author may not be used to endorse or promote products 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// derived from this software without specific prior written permission. 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3defs.h> 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3exception.h> 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3input.h> 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3tokenstream.h> 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3commontoken.h> 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3commontreenodestream.h> 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3debugeventlistener.h> 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3recognizersharedstate.h> 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Type indicator for a lexer recognizer 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANTLR3_TYPE_LEXER 0x0001 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Type indicator for a parser recognizer 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANTLR3_TYPE_PARSER 0x0002 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Type indicator for a tree parser recognizer 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANTLR3_TYPE_TREE_PARSER 0x0004 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifdef __cplusplus 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverextern "C" { 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** \brief Base tracking context structure for all types of 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * recognizers. 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef struct ANTLR3_BASE_RECOGNIZER_struct 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Whatever super structure is providing this interface needs a pointer to itself 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// so that this can be passed back to it whenever the api functions 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// are called back from here. 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * super; 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Indicates the type of recognizer that we are an instance of. 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// The programmer may set this to anything of course, but the default 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// implementations of the interface only really understand the built in 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// types, so new error handlers etc would probably be required to as well. 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Valid types are: 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// - #ANTLR3_TYPE_LEXER 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// - #ANTLR3_TYPE_PARSER 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// - #ANTLR3_TYPE_TREE_PARSER 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 type; 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// A pointer to the shared recognizer state, such that multiple 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// recognizers can use the same inputs streams and so on (in 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// the case of grammar inheritance for instance. 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_RECOGNIZER_SHARED_STATE state; 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// If set to something other than NULL, then this structure is 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// points to an instance of the debugger interface. In general, the 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// debugger is only referenced internally in recovery/error operations 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// so that it does not cause overhead by having to check this pointer 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// in every function/method 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_DEBUG_EVENT_LISTENER debugger; 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Pointer to a function that matches the current input symbol 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// against the supplied type. the function causes an error if a 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// match is not found and the default implementation will also 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// attempt to perform one token insertion or deletion if that is 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// possible with the input stream. You can override the default 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// implementation by installing a pointer to your own function 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// in this interface after the recognizer has initialized. This can 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// perform different recovery options or not recover at all and so on. 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// To ignore recovery altogether, see the comments in the default 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// implementation of this function in antlr3baserecognizer.c 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Note that errors are signalled by setting the error flag below 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// and creating a new exception structure and installing it in the 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// exception pointer below (you can chain these if you like and handle them 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// in some customized way). 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*match) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Pointer to a function that matches the next token/char in the input stream 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// regardless of what it actually is. 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*matchAny) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Pointer to a function that decides if the token ahead of the current one is the 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// one we were loking for, in which case the curernt one is very likely extraneous 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// and can be reported that way. 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (*mismatchIsUnwantedToken) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, pANTLR3_INT_STREAM input, ANTLR3_UINT32 ttype); 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Pointer to a function that decides if the current token is one that can logically 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// follow the one we were looking for, in which case the one we were looking for is 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// probably missing from the input. 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (*mismatchIsMissingToken) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, pANTLR3_INT_STREAM input, pANTLR3_BITSET_LIST follow); 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that works out what to do when a token mismatch 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * occurs, so that Tree parsers can behave differently to other recognizers. 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*mismatch) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function to call to report a recognition problem. You may override 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * this function with your own function, but refer to the standard implementation 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * in antlr3baserecognizer.c for guidance. The function should recognize whether 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * error recovery is in force, so that it does not print out more than one error messages 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * for the same error. From the java comments in BaseRecognizer.java: 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This method sets errorRecovery to indicate the parser is recovering 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * not parsing. Once in recovery mode, no errors are generated. 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * To get out of recovery mode, the parser must successfully match 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * a token (after a resync). So it will go: 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 1. error occurs 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 2. enter recovery mode, report error 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 3. consume until token found in resynch set 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 4. try to resume parsing 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 5. next match() will reset errorRecovery mode 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*reportError) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that is called to display a recognition error message. You may 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * override this function independently of (*reportError)() above as that function calls 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * this one to do the actual exception printing. 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*displayRecognitionError) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, pANTLR3_UINT8 * tokenNames); 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Get number of recognition errors (lexer, parser, tree parser). Each 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// recognizer tracks its own number. So parser and lexer each have 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// separate count. Does not count the spurious errors found between 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// an error and next valid token match 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// \see reportError() 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (*getNumberOfSyntaxErrors) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that recovers from an error found in the input stream. 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Generally, this will be a #ANTLR3_EXCEPTION_NOVIABLE_ALT but it could also 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * be from a mismatched token that the (*match)() could not recover from. 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*recover) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that is a hook to listen to token consumption during error recovery. 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This is mainly used by the debug parser to send events to the listener. 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*beginResync) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that is a hook to listen to token consumption during error recovery. 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This is mainly used by the debug parser to send events to the listener. 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*endResync) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that is a hook to listen to token consumption during error recovery. 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This is mainly used by the debug parser to send events to the listener. 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*beginBacktrack) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, ANTLR3_UINT32 level); 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that is a hook to listen to token consumption during error recovery. 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This is mainly used by the debug parser to send events to the listener. 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*endBacktrack) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, ANTLR3_UINT32 level, ANTLR3_BOOLEAN successful); 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function to computer the error recovery set for the current rule. 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * \see antlr3ComputeErrorRecoverySet() for details. 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET (*computeErrorRecoverySet) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that computes the context-sensitive FOLLOW set for the 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * current rule. 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * \see antlr3ComputeCSRuleFollow() for details. 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET (*computeCSRuleFollow) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function to combine follow bitsets. 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * \see antlr3CombineFollows() for details. 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET (*combineFollows) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN exact); 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that recovers from a mismatched token in the input stream. 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * \see antlr3RecoverMismatch() for details. 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*recoverFromMismatchedToken) 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 ttype, 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET_LIST follow); 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that recovers from a mismatched set in the token stream, in a similar manner 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * to (*recoverFromMismatchedToken) 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*recoverFromMismatchedSet) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET_LIST follow); 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to common routine to handle single token insertion for recovery functions. 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN (*recoverFromMismatchedElement) 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET_LIST follow); 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that consumes input until the next token matches 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * the given token. 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*consumeUntil) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 tokenType); 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that consumes input until the next token matches 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * one in the given set. 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*consumeUntilSet) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET set); 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that returns an ANTLR3_LIST of the strings that identify 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * the rules in the parser that got you to this point. Can be overridden by installing your 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * own function set. 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * \todo Document how to override invocation stack functions. 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STACK (*getRuleInvocationStack) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STACK (*getRuleInvocationStackNamed) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 name); 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that converts an ANLR3_LIST of tokens to an ANTLR3_LIST of 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * string token names. As this is mostly used in string template processing it may not be useful 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * in the C runtime. 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_HASH_TABLE (*toStrings) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_HASH_TABLE); 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function to return whether the rule has parsed input starting at the supplied 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * start index before. If the rule has not parsed input starting from the supplied start index, 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * then it will return ANTLR3_MEMO_RULE_UNKNOWN. If it has parsed from the suppled start point 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * then it will return the point where it last stopped parsing after that start point. 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_MARKER (*getRuleMemoization) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_INTKEY ruleIndex, 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_MARKER ruleParseStart); 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that determines whether the rule has parsed input at the current index 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * in the input stream 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN (*alreadyParsedRule) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_MARKER ruleIndex); 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that records whether the rule has parsed the input at a 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * current position successfully or not. 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*memoize) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_MARKER ruleIndex, 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_MARKER ruleParseStart); 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Pointer to a function that returns the current input symbol. 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// The is placed into any label for the associated token ref; e.g., x=ID. Token 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// and tree parsers need to return different objects. Rather than test 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// for input stream type or change the IntStream interface, I use 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// a simple method to ask the recognizer to tell me what the current 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// input symbol is. 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// This is ignored for lexers and the lexer implementation of this 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// function should return NULL. 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*getCurrentInputSymbol) ( struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_INT_STREAM istream); 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Conjure up a missing token during error recovery. 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// The recognizer attempts to recover from single missing 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// symbols. But, actions might refer to that missing symbol. 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// For example, x=ID {f($x);}. The action clearly assumes 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// that there has been an identifier matched previously and that 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// $x points at that token. If that token is missing, but 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// the next token in the stream is what we want we assume that 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// this token is missing and we keep going. Because we 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// have to return some token to replace the missing token, 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// we have to conjure one up. This method gives the user control 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// over the tokens returned for missing tokens. Mostly, 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// you will want to create something special for identifier 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// tokens. For literals such as '{' and ',', the default 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// action in the parser or tree parser works. It simply creates 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// a CommonToken of the appropriate type. The text will be the token. 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// If you change what tokens must be created by the lexer, 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// override this method to create the appropriate tokens. 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void * (*getMissingSymbol) ( struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_INT_STREAM istream, 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_EXCEPTION e, 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 expectedTokenType, 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_BITSET_LIST follow); 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that returns whether the supplied grammar function 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * will parse the current input stream or not. This is the way that syntactic 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * predicates are evaluated. Unlike java, C is perfectly happy to invoke code 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * via a pointer to a function (hence that's what all the ANTLR3 C interfaces 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * do. 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BOOLEAN (*synpred) ( struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, void * ctx, 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*predicate)(void * ctx)); 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that can construct a generic exception structure 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * with such information as the input stream can provide. 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*exConstruct) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Reset the recognizer 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*reset) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that knows how to free the resources of a base recognizer. 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*free) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_BASE_RECOGNIZER; 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifdef __cplusplus 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3lexer.h> 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3parser.h> 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3treeparser.h> 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// @} 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/// 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif /* _ANTLR3_BASERECOGNIZER_H */ 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 372