1
/* This file is part of KDevelop
2
Copyright (C) 2002,2003 Roberto Raggi <roberto@kdevelop.org>
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Library General Public
6
License as published by the Free Software Foundation; either
7
version 2 of the License, or (at your option) any later version.
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public License
15
along with this library; see the file COPYING.LIB. If not, write to
16
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
Boston, MA 02111-1307, USA.
20
#include "tree_parser.h"
23
TreeParser::TreeParser()
27
TreeParser::~TreeParser()
31
void TreeParser::parseTranslationUnit( TranslationUnitAST* translationUnit )
33
//kdDebug(9007) << "TreeParser::parseTranslationUnit()" << endl;
35
QPtrList<DeclarationAST> declarations = translationUnit->declarationList();
36
QPtrListIterator<DeclarationAST> it( declarations );
37
while( it.current() ){
38
parseDeclaration( it.current() );
43
void TreeParser::parseDeclaration( DeclarationAST* declaration )
45
//kdDebug(9007) << "TreeParser::parseDeclaration()" << endl;
50
switch( declaration->nodeType() )
52
case NodeType_LinkageSpecification:
53
parseLinkageSpecification( static_cast<LinkageSpecificationAST*>(declaration) );
56
case NodeType_Namespace:
57
parseNamespace( static_cast<NamespaceAST*>(declaration) );
60
case NodeType_NamespaceAlias:
61
parseNamespaceAlias( static_cast<NamespaceAliasAST*>(declaration) );
65
parseUsing( static_cast<UsingAST*>(declaration) );
68
case NodeType_UsingDirective:
69
parseUsingDirective( static_cast<UsingDirectiveAST*>(declaration) );
72
case NodeType_Typedef:
73
parseTypedef( static_cast<TypedefAST*>(declaration) );
76
case NodeType_TemplateDeclaration:
77
parseTemplateDeclaration( static_cast<TemplateDeclarationAST*>(declaration) );
80
case NodeType_SimpleDeclaration:
81
parseSimpleDeclaration( static_cast<SimpleDeclarationAST*>(declaration) );
84
case NodeType_FunctionDefinition:
85
parseFunctionDefinition( static_cast<FunctionDefinitionAST*>(declaration) );
88
case NodeType_AccessDeclaration:
89
parseAccessDeclaration( static_cast<AccessDeclarationAST*>(declaration) );
94
void TreeParser::parseLinkageSpecification( LinkageSpecificationAST* ast )
96
//kdDebug(9007) << "TreeParser::parseLinkageSpecification()" << endl;
97
if( ast->linkageBody() )
98
parseLinkageBody( ast->linkageBody() );
99
else if( ast->declaration() )
100
parseDeclaration( ast->declaration() );
103
void TreeParser::parseNamespace( NamespaceAST* decl )
105
//kdDebug(9007) << "TreeParser::parseNamespace()" << endl;
106
if( decl->linkageBody() )
107
parseLinkageBody( decl->linkageBody() );
110
void TreeParser::parseNamespaceAlias( NamespaceAliasAST* decl )
112
//kdDebug(9007) << "TreeParser::parseNamespaceAlias()" << endl;
116
void TreeParser::parseUsing( UsingAST* decl )
118
//kdDebug(9007) << "TreeParser::parseUsing()" << endl;
122
void TreeParser::parseUsingDirective( UsingDirectiveAST* decl )
124
//kdDebug(9007) << "TreeParser::parseUsingDirective()" << endl;
128
void TreeParser::parseTypedef( TypedefAST* decl )
130
//kdDebug(9007) << "TreeParser::parseTypedef()" << endl;
131
if( decl->typeSpec() )
132
parseTypeSpecifier( decl->typeSpec() );
135
void TreeParser::parseTemplateDeclaration( TemplateDeclarationAST* decl )
137
//kdDebug(9007) << "TreeParser::parseTemplateDeclaration()" << endl;
141
void TreeParser::parseSimpleDeclaration( SimpleDeclarationAST* decl )
143
//kdDebug(9007) << "TreeParser::parseSimpleDeclaration()" << endl;
147
void TreeParser::parseFunctionDefinition( FunctionDefinitionAST* def )
149
//kdDebug(9007) << "TreeParser::parseFunctionDefinition()" << endl;
153
void TreeParser::parseLinkageBody( LinkageBodyAST* linkageBody )
155
//kdDebug(9007) << "TreeParser::parseLinkageBody()" << endl;
156
QPtrList<DeclarationAST> declarations = linkageBody->declarationList();
157
for( QPtrListIterator<DeclarationAST> it(declarations); it.current(); ++it ){
158
parseDeclaration( it.current() );
162
void TreeParser::parseTypeSpecifier( TypeSpecifierAST* typeSpec )
164
//kdDebug(9007) << "TreeParser::parseTypeSpecifier()" << endl;
165
switch( typeSpec->nodeType() )
167
case NodeType_ClassSpecifier:
168
parseClassSpecifier( static_cast<ClassSpecifierAST*>(typeSpec) );
171
case NodeType_EnumSpecifier:
172
parseEnumSpecifier( static_cast<EnumSpecifierAST*>(typeSpec) );
175
case NodeType_ElaboratedTypeSpecifier:
176
parseElaboratedTypeSpecifier( static_cast<ElaboratedTypeSpecifierAST*>(typeSpec) );
181
void TreeParser::parseClassSpecifier( ClassSpecifierAST* classSpec )
183
//kdDebug(9007) << "TreeParser::parseClassSpecifier()" << endl;
184
QPtrList<DeclarationAST> declarations = classSpec->declarationList();
185
for( QPtrListIterator<DeclarationAST> it(declarations); it.current(); ++it ){
186
parseDeclaration( it.current() );
190
void TreeParser::parseEnumSpecifier( EnumSpecifierAST* enumSpec )
192
//kdDebug(9007) << "TreeParser::parseEnumSpecifier()" << endl;
193
Q_UNUSED( enumSpec );
196
void TreeParser::parseElaboratedTypeSpecifier( ElaboratedTypeSpecifierAST* typeSpec )
198
//kdDebug(9007) << "TreeParser::parseElaboratedTypeSpecifier()" << endl;
199
Q_UNUSED( typeSpec );
202
void TreeParser::parseAccessDeclaration ( AccessDeclarationAST * access )
204
//kdDebug(9007) << "TreeParser::parseAccessDeclaration()" << endl;