File indexing completed on 2024-05-19 15:46:16

0001 /*
0002     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef QMAKEAST_H
0008 #define QMAKEAST_H
0009 
0010 #include <QString>
0011 #include <QList>
0012 
0013 #include "parser_export.h"
0014 
0015 namespace KDevelop
0016 {
0017 class DUContext;
0018 }
0019 
0020 namespace QMake
0021 {
0022 class ValueAST;
0023 
0024 class KDEVQMAKEPARSER_EXPORT AST
0025 {
0026 public:
0027 
0028     enum Type
0029     {
0030         Project = 0,
0031         ScopeBody = 1,
0032         Assignment = 2,
0033         FunctionCall = 3,
0034         SimpleScope = 4,
0035         Or = 5,
0036         Value = 6,
0037         Invalid = 7
0038     };
0039 
0040     AST( AST* parent, AST::Type type );
0041     virtual ~AST();
0042     AST::Type type;
0043     int startLine;
0044     int endLine;
0045     int startColumn;
0046     int endColumn;
0047     int start;
0048     int end;
0049     AST* parent;
0050     KDevelop::DUContext* context;
0051 };
0052 
0053 class KDEVQMAKEPARSER_EXPORT StatementAST : public AST
0054 {
0055 public:
0056     StatementAST( AST* parent, AST::Type type );
0057     ~StatementAST() override;
0058 };
0059 
0060 class KDEVQMAKEPARSER_EXPORT ScopeBodyAST: public AST
0061 {
0062 public:
0063     explicit ScopeBodyAST( AST* parent, AST::Type type = AST::ScopeBody );
0064     ~ScopeBodyAST() override;
0065     QList<StatementAST*> ifStatements;
0066     QList<StatementAST*> elseStatements;
0067 };
0068 
0069 class KDEVQMAKEPARSER_EXPORT ProjectAST : public AST
0070 {
0071 public:
0072     explicit ProjectAST();
0073     ~ProjectAST() override;
0074     QString filename;
0075     QList<StatementAST*> statements;
0076 };
0077 
0078 class KDEVQMAKEPARSER_EXPORT AssignmentAST : public StatementAST
0079 {
0080 public:
0081     explicit AssignmentAST( AST* parent );
0082     ~AssignmentAST() override;
0083 
0084     ValueAST* identifier;
0085     ValueAST* op;
0086     QList<ValueAST*> values;
0087 };
0088 
0089 
0090 class KDEVQMAKEPARSER_EXPORT ScopeAST : public StatementAST
0091 {
0092 public:
0093     explicit ScopeAST( AST* parent, AST::Type type);
0094     ~ScopeAST() override;
0095     ScopeBodyAST* body;
0096 };
0097 
0098 class KDEVQMAKEPARSER_EXPORT FunctionCallAST : public ScopeAST
0099 {
0100 public:
0101     explicit FunctionCallAST( AST* parent );
0102     ~FunctionCallAST() override;
0103     ValueAST* identifier;
0104     QList<ValueAST*> args;
0105 };
0106 
0107 
0108 class KDEVQMAKEPARSER_EXPORT SimpleScopeAST : public ScopeAST
0109 {
0110 public:
0111     explicit SimpleScopeAST( AST* parent );
0112     ~SimpleScopeAST() override;
0113     ValueAST* identifier;
0114 };
0115 
0116 class KDEVQMAKEPARSER_EXPORT OrAST : public ScopeAST
0117 {
0118 public:
0119     explicit OrAST( AST* parent );
0120     ~OrAST() override;
0121     QList<ScopeAST*> scopes;
0122 };
0123 
0124 class KDEVQMAKEPARSER_EXPORT ValueAST : public AST
0125 {
0126 public:
0127     explicit ValueAST( AST* parent );
0128     QString value;
0129 };
0130 
0131 }
0132 
0133 #endif