Files
BlitzLLVM/code_compiler/source/ast/value.hpp
T

86 lines
1.7 KiB
C++
Raw Normal View History

2024-06-25 18:59:15 +02:00
/// AUTOGENERATED COPYRIGHT HEADER START
// Copyright (C) 2024 Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
// AUTOGENERATED COPYRIGHT HEADER END
2024-06-06 13:37:13 +02:00
#pragma once
#include "ast.hpp"
#include "lexer.hpp"
#include <inttypes.h>
#include <float.h>
#include <math.h>
#include <memory>
#include <string>
2024-06-06 14:04:34 +02:00
namespace blitz {
2024-06-25 18:59:15 +02:00
namespace ast {
2024-06-06 13:37:13 +02:00
enum class ValueType : int8_t {
2024-06-26 00:31:06 +02:00
UNKNOWN,
INTEGER,
REAL,
STRING,
TYPE,
2024-06-06 13:37:13 +02:00
};
2024-06-25 18:59:15 +02:00
class ValueExpression : public expression {
2024-06-06 13:37:13 +02:00
public:
virtual ValueType GetType() = 0;
};
class ConstExpression : public ValueExpression {
public:
ConstExpression(std::string& name, std::unique_ptr<ValueExpression> value);
virtual ~ConstExpression();
virtual ValueType GetType() override;
private:
std::string m_name;
std::unique_ptr<ValueExpression> m_value;
};
class VariableExpression : public ValueExpression {
public:
2024-06-26 00:31:06 +02:00
VariableExpression(std::string& name, ValueType type = ValueType::INTEGER);
2024-06-06 13:37:13 +02:00
virtual ~VariableExpression();
virtual ValueType GetType() override;
private:
std::string m_name;
ValueType m_type;
};
class NumberExpression : public ValueExpression {
public:
NumberExpression(int32_t value);
virtual ~NumberExpression();
virtual ValueType GetType() override;
private:
int32_t value;
};
class DecimalExpression : public ValueExpression {
public:
DecimalExpression(float_t value);
virtual ~DecimalExpression();
virtual ValueType GetType() override;
private:
float_t value;
};
class StringExpression : public ValueExpression {
public:
StringExpression(std::string value);
virtual ~StringExpression();
virtual ValueType GetType() override;
private:
std::string value;
};
}
2024-06-26 00:31:06 +02:00
}