blob: 41d803166b1bf02866d5748a4526cfb7961a7aa5 [file] [log] [blame]
#pragma once
#include <QList>
#include <QChar>
template <typename T>
class TokenBase
{
public:
TokenBase();
TokenBase(const T &other);
TokenBase(QString integer, int base);
explicit TokenBase(QChar symbol);
explicit TokenBase(QString identifier);
explicit TokenBase(QList<T> parenthesized);
TokenBase(char varType, const QString name);
static T fromInteger(int integer);
bool operator==(const T &other) const;
bool operator!=(const T &other) const;
bool isSym() const;
bool isIdent() const;
bool isParen() const;
bool isVar() const;
bool isInteger() const;
QList<T> parenContent();
char varType() const;
const QString &name() const;
QChar symbol() const;
int integer() const;
operator QString() const;
enum
{
SYM,
IDENT,
PAREN,
VAR,
INTEGER,
TOKEN_TYPE_LAST,
};
static QString typeToString(int type);
int type() const;
protected:
int _type = 0;
int _intVal = 0;
QString _stringVal = "";
QList<T> _listVal;
QChar _charVal = 0;
};
class Token : public TokenBase<Token>
{
public:
using TokenBase::TokenBase;
};
using LTok = QList<Token>;