X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5dd5f9ec28f304ca377c42fd7f711d6cf12b90e1..5c19dc3ae3bd8e40a9c028b0deddd50ff337692c:/OSX/libsecurity_codesigning/antlr2/src/Parser.cpp diff --git a/OSX/libsecurity_codesigning/antlr2/src/Parser.cpp b/OSX/libsecurity_codesigning/antlr2/src/Parser.cpp new file mode 100644 index 00000000..8b540f82 --- /dev/null +++ b/OSX/libsecurity_codesigning/antlr2/src/Parser.cpp @@ -0,0 +1,113 @@ +/* ANTLR Translator Generator + * Project led by Terence Parr at http://www.jGuru.com + * Software rights: http://www.antlr.org/license.html + * + * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/src/Parser.cpp#2 $ + */ + +#include "antlr/Parser.hpp" + +#include + +#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE +namespace antlr { +#endif + +/** A generic ANTLR parser (LL(k) for k>=1) containing a bunch of + * utility routines useful at any lookahead depth. We distinguish between + * the LL(1) and LL(k) parsers because of efficiency. This may not be + * necessary in the near future. + * + * Each parser object contains the state of the parse including a lookahead + * cache (the form of which is determined by the subclass), whether or + * not the parser is in guess mode, where tokens come from, etc... + * + *

+ * During guess mode, the current lookahead token(s) and token type(s) + * cache must be saved because the token stream may not have been informed + * to save the token (via mark) before the try block. + * Guessing is started by: + *

    + *
  1. saving the lookahead cache. + *
  2. marking the current position in the TokenBuffer. + *
  3. increasing the guessing level. + *
+ * + * After guessing, the parser state is restored by: + *
    + *
  1. restoring the lookahead cache. + *
  2. rewinding the TokenBuffer. + *
  3. decreasing the guessing level. + *
+ * + * @see antlr.Token + * @see antlr.TokenBuffer + * @see antlr.TokenStream + * @see antlr.LL1Parser + * @see antlr.LLkParser + */ + +bool DEBUG_PARSER = false; + +/** Parser error-reporting function can be overridden in subclass */ +void Parser::reportError(const RecognitionException& ex) +{ + fprintf(stderr, "%s", (ex.toString() + "\n").c_str()); +} + +/** Parser error-reporting function can be overridden in subclass */ +void Parser::reportError(const ANTLR_USE_NAMESPACE(std)string& s) +{ + if ( getFilename()=="" ) + fprintf(stderr, "%s", ("error: " + s + "\n").c_str()); + else + fprintf(stderr, "%s", (getFilename() + ": error: " + s + "\n").c_str()); +} + +/** Parser warning-reporting function can be overridden in subclass */ +void Parser::reportWarning(const ANTLR_USE_NAMESPACE(std)string& s) +{ + if ( getFilename()=="" ) + fprintf(stderr, "%s", ("warning: " + s + "\n").c_str()); + else + fprintf(stderr, "%s", (getFilename() + ": warning: " + s + "\n").c_str()); +} + +/** Set or change the input token buffer */ +// void setTokenBuffer(TokenBuffer* t); + +void Parser::traceIndent() +{ + for( int i = 0; i < traceDepth; i++ ) + printf(" "); +} + +void Parser::traceIn(const char* rname) +{ + traceDepth++; + + for( int i = 0; i < traceDepth; i++ ) + printf(" ");; + + printf("%s",((ANTLR_USE_NAMESPACE(std)string)"> " + rname + + "; LA(1)==" + LT(1)->getText() + + ((inputState->guessing>0)?" [guessing]":"") + + "\n").c_str()); +} + +void Parser::traceOut(const char* rname) +{ + for( int i = 0; i < traceDepth; i++ ) + printf(" ");; + + printf("%s",((ANTLR_USE_NAMESPACE(std)string)"< " + rname + + "; LA(1)==" + LT(1)->getText() + + ((inputState->guessing>0)?" [guessing]":"") + + "\n").c_str()); + + traceDepth--; +} + +#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE +} +#endif