LLkParser.cpp
1 /* ANTLR Translator Generator 2 * Project led by Terence Parr at http://www.jGuru.com 3 * Software rights: http://www.antlr.org/license.html 4 * 5 * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/src/LLkParser.cpp#2 $ 6 */ 7 8 #include "antlr/LLkParser.hpp" 9 #include <stdio.h> 10 11 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 12 namespace antlr { 13 #endif 14 15 ANTLR_USING_NAMESPACE(std) 16 17 /**An LL(k) parser. 18 * 19 * @see antlr.Token 20 * @see antlr.TokenBuffer 21 * @see antlr.LL1Parser 22 */ 23 24 // LLkParser(int k_); 25 26 LLkParser::LLkParser(const ParserSharedInputState& state, int k_) 27 : Parser(state), k(k_) 28 { 29 } 30 31 LLkParser::LLkParser(TokenBuffer& tokenBuf, int k_) 32 : Parser(tokenBuf), k(k_) 33 { 34 } 35 36 LLkParser::LLkParser(TokenStream& lexer, int k_) 37 : Parser(new TokenBuffer(lexer)), k(k_) 38 { 39 } 40 41 void LLkParser::trace(const char* ee, const char* rname) 42 { 43 traceIndent(); 44 45 printf("%s", ((string)ee + rname + ((inputState->guessing>0)?"; [guessing]":"; ")).c_str()); 46 47 for (int i = 1; i <= k; i++) 48 { 49 if (i != 1) { 50 printf(", "); 51 } 52 printf("LA(%d)==", i); 53 54 string temp; 55 56 try { 57 temp = LT(i)->getText().c_str(); 58 } 59 catch( ANTLRException& ae ) 60 { 61 temp = "[error: "; 62 temp += ae.toString(); 63 temp += ']'; 64 } 65 printf("%s", temp.c_str()); 66 } 67 68 printf("\n");; 69 } 70 71 void LLkParser::traceIn(const char* rname) 72 { 73 traceDepth++; 74 trace("> ",rname); 75 } 76 77 void LLkParser::traceOut(const char* rname) 78 { 79 trace("< ",rname); 80 traceDepth--; 81 } 82 83 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 84 } 85 #endif