mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-07 15:38:49 +00:00
change in literals, literal types
This commit is contained in:
parent
17ff590048
commit
43dfa75b74
10 changed files with 168 additions and 39 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue