/*************************************************************************** * Copyright (C) 2005 by Alexander Dymo * * adymo@kdevelop.org * * * * This program 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 program 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 General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef QMAKEQMAKEAST_H #define QMAKEQMAKEAST_H #include /** @file qmakeast.h Abstract Syntax Tree (AST) class declarations. */ namespace QMake { /** AST node. This is the base class. Objects of this type are not created by the parser. Each AST node holds the list of its children which are always deleted in the destructor. This way, it's possible call delete for only root AST node and others will be deleted automatically. Each AST node also knows how to write the information back into .pro file. */ class AST { public: /**Type of AST node.*/ enum NodeType { ProjectAST /** m_children; protected: NodeType m_nodeType; private: int m_depth; }; /** Project AST node. Represents complete projects, scopes and function scopes. Examples: @code scopename{ var=value } function(args){ var=value } @endcode */ class ProjectAST: public AST { public: /**The kind of a project node.*/ enum Kind { Project /** var=value Values can be specified on several lines and each line is stored as a string in the list of values.@n For example, if we have in .pro:
SOURCES=a.cpp \
    b.cpp c.cpp
then values will be stored as a two elements list:
a.cpp
    b.cpp c.cpp
*/ class AssignmentAST: public AST { public: AssignmentAST(): AST(AST::AssignmentAST){} ~AssignmentAST(); virtual void writeBack(QString &buffer); /**Scoped name of the variable.*/ QString scopedID; /**Operator.*/ QString op; /**List of values.*/ QStringList values; /**Indentation of multiline values*/ QString indent; }; /** New line AST node. Represents line feeds in files. */ class NewLineAST: public AST { public: NewLineAST(): AST(AST::NewLineAST) {} virtual void writeBack(QString &buffer); }; /** Comment AST node. Represents comments. */ class CommentAST: public AST { public: CommentAST(): AST(AST::CommentAST) {} virtual void writeBack(QString &buffer); /**Comment text.*/ QString comment; }; /** Include AST node. Represents pri include. */ class IncludeAST: public AST { public: IncludeAST(): AST(AST::IncludeAST) {} virtual void writeBack(QString &buffer); QString projectName; }; } #endif