File: ParserHelper.h

package info (click to toggle)
qevercloud 3.0.3%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 932 kB
  • ctags: 666
  • sloc: cpp: 4,690; yacc: 486; makefile: 42
file content (107 lines) | stat: -rw-r--r-- 2,810 bytes parent folder | download | duplicates (3)
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
#ifndef QEVERCLOUD_GENERATOR_THRIFT_PARSER_PARSER_HELPER_H
#define QEVERCLOUD_GENERATOR_THRIFT_PARSER_PARSER_HELPER_H

#include <QString>
#include "Parser.h"

class AbstratNoterminal {
public:
    virtual ~AbstratNoterminal() = 0;
};

inline AbstratNoterminal::~AbstratNoterminal() {}

class Fieldtype: public AbstratNoterminal {
public:
    virtual QSharedPointer<Parser::Type> type() = 0;
};

class VoidType: public Fieldtype {
public:
    QSharedPointer<Parser::Type> type() override {
        QSharedPointer<Parser::VoidType> p(new Parser::VoidType);
        return p;
    }
};

class Identifier_Fieldtype: public Fieldtype {
public:
    ~Identifier_Fieldtype() override {}
    QString identifier;
    QSharedPointer<Parser::Type> type() override
    {
        QSharedPointer<Parser::IdentifierType> p(new Parser::IdentifierType);
        p->identifier = identifier;
        return p;
    }
};

class Definitiontype: public Fieldtype {
public:
};

class Basename_Definitiontype: public Definitiontype {
public:
    ~Basename_Definitiontype() override {}
    QString basetype;
    QSharedPointer<Parser::Type> type() override
    {
        QSharedPointer<Parser::BaseType> p(new Parser::BaseType);
        p->basetype = basetype;
        return p;
    }
};

class Containertype: public AbstratNoterminal {
public:
    virtual QSharedPointer<Parser::Type> type() = 0;
};

class Containertype_Definitiontype: public Definitiontype {
public:
    Containertype_Definitiontype(): containertype(nullptr) {}
    ~Containertype_Definitiontype() override { delete containertype;}
    Containertype* containertype;
    QSharedPointer<Parser::Type> type() override
    {
        if(containertype) return containertype->type();
        throw std::runtime_error("containertype == nullptr");
    }
};

class Maptype: public Containertype {
public:
    ~Maptype() override {}
    QSharedPointer<Parser::Type> type() override {
        QSharedPointer<Parser::MapType> p(new Parser::MapType);
        p->keyType = keyType;
        p->valueType = valueType;
        return p;
    }
    QSharedPointer<Parser::Type> keyType;
    QSharedPointer<Parser::Type> valueType;
};

class Listtype: public Containertype {
public:
    ~Listtype() override {}
    QSharedPointer<Parser::Type> type() override {
        QSharedPointer<Parser::ListType> p(new Parser::ListType);
        p->valueType = valueType;
        return p;
    }
    QSharedPointer<Parser::Type> valueType;
};

class Settype: public Containertype {
public:
    ~Settype() override {}
    QSharedPointer<Parser::Type> type() override {
        QSharedPointer<Parser::SetType> p(new Parser::SetType);
        p->valueType = valueType;
        return p;
    }
    QSharedPointer<Parser::Type> valueType;
};

#endif // QEVERCLOUD_GENERATOR_THRIFT_PARSER_PARSER_HELPER_H