1 |
tim |
770 |
/* 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 |
gezelter |
1442 |
* $Id$ |
6 |
tim |
770 |
*/ |
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 |