File: GrpParserDebug.cpp

package info (click to toggle)
grcompiler 4.2-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 11,076 kB
  • ctags: 5,163
  • sloc: cpp: 45,565; sh: 4,451; ansic: 4,377; makefile: 185; xml: 175; perl: 127
file content (194 lines) | stat: -rw-r--r-- 6,752 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/*--------------------------------------------------------------------*//*:Ignore this sentence.
Copyright (C) 1999, 2001 SIL International. All rights reserved.

Distributable under the terms of either the Common Public License or the
GNU Lesser General Public License, as specified in the LICENSING.txt file.

File: GrpParserDebug.cpp
Responsibility: Sharon Correll
Last reviewed: Not yet.

Description:
    Additions to the auto-generated ANTLR stuff, for debugging.
-------------------------------------------------------------------------------*//*:End Ignore*/
#include "Grp.h"
#include "GrPlatform.h"

#pragma hdrstop
#undef THIS_FILE
DEFINE_THIS_FILE

static char intString[20];

/*----------------------------------------------------------------------------------------------
	Print the syntax tree to the standard output.
----------------------------------------------------------------------------------------------*/
void AST::Trace(std::ostream & strmOut, const char * s, int level)
{
	// Note: we iterate through the siblings instead of recursing, to avoid stack overflows.

	AST * pAST = this;
	while (pAST)
	{
		for (int i = 0; i < level * 3; i++)
			strmOut << " ";

		if (s != 0)
			strmOut << s;

		GrpASTNode * grNode = dynamic_cast<GrpASTNode *>(getNode());
		Assert(grNode);

		strmOut << debugString() << "(" << getType() << ")";
		if (getText() != "")
			strmOut << ": '" << getText().c_str() << "'";
		int line = grNode->LineAndFile().PreProcessedLine();
		if (line > 0)
			strmOut << "  [line #" << line << "]";
		strmOut << "\n";

		AST * pASTChild = getFirstChild();
		if (pASTChild)
			pASTChild->Trace(strmOut, 0, level + 1);

		pAST = pAST->getNextSibling();
	}
}


/*----------------------------------------------------------------------------------------------
	Answer a string describing the tree's root node.
----------------------------------------------------------------------------------------------*/
const char * AST::debugString()
{
	if (this == NULL)
		return "NULL";

	GrpASTNode * wrNode = dynamic_cast<GrpASTNode *>(node);
	if (wrNode)
		return wrNode->debugString();
	else
		return "???";
}


/*----------------------------------------------------------------------------------------------
	Answer a string describing the node's token type.
----------------------------------------------------------------------------------------------*/
const char * GrpASTNode::debugString()
{
	if (this == NULL)
		return "NULL";

//	if (!ValidReadPtr(this))
//		return "corrupt";

	switch (getType())
	{
	case EOF_:					return "EOF";
	case NULL_TREE_LOOKAHEAD:	return "NULL_TREE_LOOKAHEAD";
	case OP_EQ:					return "OP_EQ";
	case OP_PLUSEQUAL:			return "OP_PLUSEQUAL";
	case OP_LPAREN:				return "OP_LPAREN";
	case OP_RPAREN:				return "OP_RPAREN";
	case OP_SEMI:				return "OP_SEMI";
	case LITERAL_environment:	return "LITERAL_environment";
	case LITERAL_endenvironment:	return "LITERAL_endenvironment";
	case OP_LBRACE:				return "OP_LBRACE";
	case IDENT:					return "IDENT";
	case LIT_INT:				return "LIT_INT";
	case OP_RBRACE:				return "OP_RBRACE";
	case LITERAL_table:			return "LITERAL_table";
	case LITERAL_endtable:		return "LITERAL_endtable";
	case LITERAL_name:			return "LITERAL_name";
	case OP_DOT:				return "OP_DOT";
	case LIT_STRING:			return "LIT_STRING";
//	case LIT_UNICHAR:			return "LIT_UNICHAR";
	case OP_COMMA:				return "OP_COMMA";
	case LITERAL_string:		return "LITERAL_string";
	case LITERAL_glyph:			return "LITERAL_glyph";
	case OP_LBRACKET:			return "OP_LBRACKET";
	case OP_RBRACKET:			return "OP_RBRACKET";
	case LITERAL_codepoint:		return "LITERAL_codepoint";
	case LIT_CHAR:				return "LIT_CHAR";
	case OP_DOTDOT:				return "OP_DOTDOT";
	case LITERAL_glyphid:		return "LITERAL_glyphid";
	case LITERAL_postscript:	return "LITERAL_postscript";
	case LITERAL_unicode:		return "LITERAL_unicode";
	case LITERAL_feature:		return "LITERAL_feature";
	case LITERAL_substitution :	return "LITERAL_substitution";
	case LITERAL_pass:			return "LITERAL_pass";
	case LITERAL_endpass:		return "LITERAL_endpass";
	case LITERAL_if:			return "LITERAL_if";
	case LITERAL_elseif:		return "LITERAL_elseif";
	case LITERAL_else:			return "LITERAL_else";
	case LITERAL_endif:			return "LITERAL_endif";
	case OP_GT:					return "OP_GT";
	case OP_DIV:				return "OP_DIV";
	case OP_UNDER:				return "OP_UNDER";
	case OP_QUESTION:			return "OP_QUESTION";
	case OP_AT:					return "OP_AT";
	case OP_COLON:				return "OP_COLON";
	case OP_DOLLAR:				return "OP_DOLLAR";
	case OP_CARET:				return "OP_CARET";
	case OP_HASH:				return "OP_HASH";
	case OP_EQUALEQUAL:			return "OP_EQUALEQUAL";
	case LITERAL_position:		return "LITERAL_position";
	case LITERAL_positioning:	return "LITERAL_positioning";
	case OP_MINUSEQUAL:			return "OP_MINUSEQUAL";
	case OP_DIVEQUAL:			return "OP_DIVEQUAL";
	case OP_MULTEQUAL:			return "OP_MULTEQUAL";
	case OP_PLUS:				return "OP_PLUS";
	case OP_MINUS:				return "OP_MINUS";
	case OP_MULT:				return "OP_MULT";
	case LITERAL_linebreak:		return "LITERAL_linebreak";
	case OP_NOT:				return "OP_NOT";
	case OP_AND:				return "OP_AND";
	case OP_OR:					return "OP_OR";
	case OP_LT:					return "OP_LT";
	case OP_LE:					return "OP_LE";
	case OP_GE:					return "OP_GE";
	case OP_NE:					return "OP_NE";
	case LITERAL_max:			return "LITERAL_max";
	case LITERAL_min:			return "LITERAL_min";
	case LITERAL_pseudo:		return "LITERAL_pseudo";
	case WS:					return "WS";
	case COMMENT_SL:			return "COMMENT_SL";
	case COMMENT_ML:			return "COMMENT_ML";
	case ESC:					return "ESC";
	case ODIGIT:				return "ODIGIT";
	case DIGIT:					return "DIGIT";
	case XDIGIT:				return "XDIGIT";
	case OP_BSLASH:				return "OP_BSLASH";
	case LITERAL_false:			return "LITERAL_false";
	case LITERAL_true:			return "LITERAL_true";
	case LITERAL_justification:	return "LITERAL_justification";
	case LITERAL_languages:		return "LITERAL_languages";
	case LITERAL_language:		return "LITERAL_language";

	case Zalias:				return "Zalias";
	case Zassocs:				return "Zassocs";
	case Zattrs:				return "Zattrs";
	case Zcluster:				return "Zcluster";
	case Zcodepage:				return "Zcodepage";
	case Zconstraint:			return "Zconstraint";
	case Zcontext:				return "Zcontext";
	case Zdirectives:			return "Zdirectives";
	case ZdotStruct:			return "ZdotStruct";
	case Zelseif:				return "Zelseif";
	case Zfeatures:				return "Zfeatures";
	case Zfunction:				return "Zfunction";
	case ZifStruct:				return "ZifStruct";
	case Zlhs:					return "Zlhs";
	case Zlookup:				return "Zlookup";
	case Zrhs:					return "Zrhs";
	case Zrule:					return "Zrule";
	case ZruleItem:				return "ZruleItem";
	case Zselector:				return "Zselector";
	case Ztop:					return "Ztop";

	default:
		itoa(getType(), intString, 10);
		return intString;
	}
}