ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/antlr/LLkParser.cpp
Revision: 2469
Committed: Fri Dec 2 15:38:03 2005 UTC (18 years, 7 months ago) by tim
File size: 1406 byte(s)
Log Message:
End of the Link --> List
Return of the Oject-Oriented
replace yacc/lex parser with antlr parser

File Contents

# Content
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: LLkParser.cpp,v 1.1 2005-12-02 15:38:02 tim Exp $
6 */
7
8 #include "antlr/LLkParser.hpp"
9 #include <iostream>
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 cout << ee << rname << ((inputState->guessing>0)?"; [guessing]":"; ");
46
47 for (int i = 1; i <= k; i++)
48 {
49 if (i != 1) {
50 cout << ", ";
51 }
52 cout << "LA(" << 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 cout << temp;
66 }
67
68 cout << endl;
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