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

# User Rev Content
1 tim 2469 /* 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