change in literals, literal types

This commit is contained in:
ProgramSnail 2023-08-12 15:55:33 +03:00
parent 17ff590048
commit 43dfa75b74
10 changed files with 168 additions and 39 deletions

View file

@ -12,14 +12,25 @@ nodes::Node build_node(parser::ParseTree::Node parser_node);
// --- literals
nodes::Literal build_float_number_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_float_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_number_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_double_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_int_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_long_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_index_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_string_literal(parser::ParseTree::Node parser_node);
nodes::Literal
build_unicode_string_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_char_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_unicode_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_bool_literal(parser::ParseTree::Node parser_node);
nodes::Literal build_unit_literal(parser::ParseTree::Node parser_node);

View file

@ -79,6 +79,14 @@ protected:
struct unit {};
struct null {};
struct unicode_string {
std::string str;
};
struct unicode {
std::string ch;
};
class Literal : public Node {
public:
template <typename T>
@ -103,7 +111,9 @@ public:
auto get_any() const { return &value_; }
private:
std::variant<double, long long, std::string, char, bool, unit, null> value_;
std::variant<float, double, int32_t, int64_t, size_t, std::string,
unicode_string, char, unicode, bool, unit, null>
value_;
};
class Identifier : public Node {

View file

@ -83,10 +83,15 @@ enum class Type {
OPERATOR_TAIL2,
OPERATOR_TAIL3,
FLOAT_NUMBER_LITERAL,
NUMBER_LITERAL,
FLOAT_LITERAL,
DOUBLE_LITERAL,
INT_LITERAL,
LONG_LITERAL,
INDEX_LITERAL,
STRING_LITERAL,
UNICODE_STRING_LITERAL,
CHAR_LITERAL,
UNICODE_LITERAL,
BOOL_LITERAL,
UNIT_LITERAL,
NULL_LITERAL,
@ -173,10 +178,15 @@ const static std::string OPERATOR_TAIL1 = "operator_tail1";
const static std::string OPERATOR_TAIL2 = "operator_tail2";
const static std::string OPERATOR_TAIL3 = "operator_tail3";
const static std::string FLOAT_NUMBER_LITERAL = "float_number_literal";
const static std::string NUMBER_LITERAL = "number_literal";
const static std::string FLOAT_LITERAL = "float_literal";
const static std::string DOUBLE_LITERAL = "double_literal";
const static std::string INT_LITERAL = "int_literal";
const static std::string LONG_LITERAL = "long_literal";
const static std::string INDEX_LITERAL = "index_literal";
const static std::string STRING_LITERAL = "string_literal";
const static std::string UNICODE_STRING_LITERAL = "unicode_string_literal";
const static std::string CHAR_LITERAL = "char_literal";
const static std::string UNICODE_LITERAL = "unicode_literal";
const static std::string BOOL_LITERAL = "bool_literal";
const static std::string UNIT_LITERAL = "unit_literal";
const static std::string NULL_LITERAL = "null_literal";
@ -270,14 +280,24 @@ inline Type string_to_type(const std::string &str) {
return Type::OPERATOR_TAIL2;
} else if (str == OPERATOR_TAIL3) {
return Type::OPERATOR_TAIL3;
} else if (str == FLOAT_NUMBER_LITERAL) {
return Type::FLOAT_NUMBER_LITERAL;
} else if (str == NUMBER_LITERAL) {
return Type::NUMBER_LITERAL;
} else if (str == FLOAT_LITERAL) {
return Type::FLOAT_LITERAL;
} else if (str == DOUBLE_LITERAL) {
return Type::DOUBLE_LITERAL;
} else if (str == INT_LITERAL) {
return Type::INT_LITERAL;
} else if (str == LONG_LITERAL) {
return Type::LONG_LITERAL;
} else if (str == INDEX_LITERAL) {
return Type::INDEX_LITERAL;
} else if (str == STRING_LITERAL) {
return Type::STRING_LITERAL;
} else if (str == UNICODE_STRING_LITERAL) {
return Type::UNICODE_STRING_LITERAL;
} else if (str == CHAR_LITERAL) {
return Type::CHAR_LITERAL;
} else if (str == UNICODE_LITERAL) {
return Type::UNICODE_LITERAL;
} else if (str == BOOL_LITERAL) {
return Type::BOOL_LITERAL;
} else if (str == UNIT_LITERAL) {