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
12namespace antlr {
13#endif
14
15ANTLR_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
26LLkParser::LLkParser(const ParserSharedInputState& state, int k_)
27: Parser(state), k(k_)
28{
29}
30
31LLkParser::LLkParser(TokenBuffer& tokenBuf, int k_)
32: Parser(tokenBuf), k(k_)
33{
34}
35
36LLkParser::LLkParser(TokenStream& lexer, int k_)
37: Parser(new TokenBuffer(lexer)), k(k_)
38{
39}
40
41void 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
71void LLkParser::traceIn(const char* rname)
72{
73	traceDepth++;
74	trace("> ",rname);
75}
76
77void LLkParser::traceOut(const char* rname)
78{
79	trace("< ",rname);
80	traceDepth--;
81}
82
83#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
84}
85#endif
86