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
|