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$ |
6 |
*/ |
7 |
|
8 |
#include "antlr/TreeParser.hpp" |
9 |
#include "antlr/ASTNULLType.hpp" |
10 |
|
11 |
#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE |
12 |
namespace antlr { |
13 |
#endif |
14 |
|
15 |
/** The AST Null object; the parsing cursor is set to this when |
16 |
* it is found to be null. This way, we can test the |
17 |
* token type of a node without having to have tests for null |
18 |
* everywhere. |
19 |
*/ |
20 |
RefAST TreeParser::ASTNULL(new ASTNULLType); |
21 |
|
22 |
/** Parser error-reporting function can be overridden in subclass */ |
23 |
void TreeParser::reportError(const RecognitionException& ex) |
24 |
{ |
25 |
ANTLR_USE_NAMESPACE(std)cerr << ex.toString().c_str() << ANTLR_USE_NAMESPACE(std)endl; |
26 |
} |
27 |
|
28 |
/** Parser error-reporting function can be overridden in subclass */ |
29 |
void TreeParser::reportError(const ANTLR_USE_NAMESPACE(std)string& s) |
30 |
{ |
31 |
ANTLR_USE_NAMESPACE(std)cerr << "error: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; |
32 |
} |
33 |
|
34 |
/** Parser warning-reporting function can be overridden in subclass */ |
35 |
void TreeParser::reportWarning(const ANTLR_USE_NAMESPACE(std)string& s) |
36 |
{ |
37 |
ANTLR_USE_NAMESPACE(std)cerr << "warning: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; |
38 |
} |
39 |
|
40 |
/** Procedure to write out an indent for traceIn and traceOut */ |
41 |
void TreeParser::traceIndent() |
42 |
{ |
43 |
for( int i = 0; i < traceDepth; i++ ) |
44 |
ANTLR_USE_NAMESPACE(std)cout << " "; |
45 |
} |
46 |
|
47 |
void TreeParser::traceIn(const char* rname, RefAST t) |
48 |
{ |
49 |
traceDepth++; |
50 |
traceIndent(); |
51 |
|
52 |
ANTLR_USE_NAMESPACE(std)cout << "> " << rname |
53 |
<< "(" << (t ? t->toString().c_str() : "null") << ")" |
54 |
<< ((inputState->guessing>0)?" [guessing]":"") |
55 |
<< ANTLR_USE_NAMESPACE(std)endl; |
56 |
} |
57 |
|
58 |
void TreeParser::traceOut(const char* rname, RefAST t) |
59 |
{ |
60 |
traceIndent(); |
61 |
|
62 |
ANTLR_USE_NAMESPACE(std)cout << "< " << rname |
63 |
<< "(" << (t ? t->toString().c_str() : "null") << ")" |
64 |
<< ((inputState->guessing>0)?" [guessing]":"") |
65 |
<< ANTLR_USE_NAMESPACE(std)endl; |
66 |
|
67 |
traceDepth--; |
68 |
} |
69 |
|
70 |
#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE |
71 |
} |
72 |
#endif |