/* This file is part of KDevelop
    Copyright (C) 2002, 2003 Roberto Raggi <roberto@kdevelop.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, see
    <http://www.gnu.org/licenses/>.
*/

#ifndef __tree_parser_h
#define __tree_parser_h

#include "ast.h"
class ParsedFile;

class TreeParser
{
public:
    TreeParser();
    virtual ~TreeParser();

    // translation-unit
    virtual void parseTranslationUnit(const ParsedFile&);

    // declarations
    virtual void parseDeclaration(DeclarationAST*);
    virtual void parseLinkageSpecification(LinkageSpecificationAST*);
    virtual void parseNamespace(NamespaceAST*);
    virtual void parseNamespaceAlias(NamespaceAliasAST*);
    virtual void parseUsing(UsingAST*);
    virtual void parseUsingDirective(UsingDirectiveAST*);
    virtual void parseTypedef(TypedefAST*);
    virtual void parseTemplateDeclaration(TemplateDeclarationAST*);
    virtual void parseSimpleDeclaration(SimpleDeclarationAST*);
    virtual void parseFunctionDefinition(FunctionDefinitionAST*);
    virtual void parseLinkageBody(LinkageBodyAST*);
    virtual void parseAccessDeclaration(AccessDeclarationAST*);

    // type-specifier
    virtual void parseTypeSpecifier(TypeSpecifierAST*);
    virtual void parseClassSpecifier(ClassSpecifierAST*);
    virtual void parseEnumSpecifier(EnumSpecifierAST*);
    virtual void parseElaboratedTypeSpecifier(ElaboratedTypeSpecifierAST*);

private:
    TreeParser(const TreeParser& source);
    void operator = (const TreeParser& source);
};

#endif // __tree_parser_h
