expression builders finished, type builders started

This commit is contained in:
ProgramSnail 2023-07-22 13:33:33 +03:00
parent 6682e0beb1
commit 535d8d26c3
12 changed files with 909 additions and 76 deletions

View file

@ -32,24 +32,24 @@ std::optional<char> to_escape_symbol(char symbol) {
} // namespace utils
nodes::Node buildNode(parser::ParseTree::Node parser_node) {
nodes::Node build_node(parser::ParseTree::Node parser_node) {
return nodes::Node(parser_node.get_start_point(),
parser_node.get_end_point());
}
// --- literals
nodes::Literal buildFloatNumberLiteral(parser::ParseTree::Node parser_node) {
return nodes::Literal(buildNode(parser_node),
nodes::Literal build_float_number_literal(parser::ParseTree::Node parser_node) {
return nodes::Literal(build_node(parser_node),
std::stod(parser_node.get_value()));
}
nodes::Literal buildNumberLiteral(parser::ParseTree::Node parser_node) {
return nodes::Literal(buildNode(parser_node),
nodes::Literal build_number_literal(parser::ParseTree::Node parser_node) {
return nodes::Literal(build_node(parser_node),
std::stoll(parser_node.get_value()));
}
nodes::Literal buildStringLiteral(parser::ParseTree::Node parser_node) {
nodes::Literal build_string_literal(parser::ParseTree::Node parser_node) {
std::string literal = parser_node.get_value();
// remove " from both sides ("string")
@ -80,10 +80,10 @@ nodes::Literal buildStringLiteral(parser::ParseTree::Node parser_node) {
}
literal.resize(j);
return nodes::Literal(buildNode(parser_node), literal);
return nodes::Literal(build_node(parser_node), literal);
}
nodes::Literal buildCharLiteral(parser::ParseTree::Node parser_node) {
nodes::Literal build_char_literal(parser::ParseTree::Node parser_node) {
std::string literal = parser_node.get_value();
// remove '' from both sides (''x'')
@ -105,57 +105,58 @@ nodes::Literal buildCharLiteral(parser::ParseTree::Node parser_node) {
ch = literal.back();
}
return nodes::Literal(buildNode(parser_node), ch);
return nodes::Literal(build_node(parser_node), ch);
}
nodes::Literal buildBoolLiteral(parser::ParseTree::Node parser_node) {
nodes::Literal build_bool_literal(parser::ParseTree::Node parser_node) {
std::string literal = parser_node.get_value();
return nodes::Literal(buildNode(parser_node),
return nodes::Literal(build_node(parser_node),
literal == "true" ? true : false);
}
nodes::Literal buildUnitLiteral(parser::ParseTree::Node parser_node) {
return nodes::Literal(buildNode(parser_node), nodes::unit{});
nodes::Literal build_Unit_literal(parser::ParseTree::Node parser_node) {
return nodes::Literal(build_node(parser_node), nodes::unit{});
}
nodes::Literal buildNullLiteral(parser::ParseTree::Node parser_node) {
return nodes::Literal(buildNode(parser_node), nodes::null{});
nodes::Literal build_null_literal(parser::ParseTree::Node parser_node) {
return nodes::Literal(build_node(parser_node), nodes::null{});
}
// --- identifiers
nodes::Identifier buildSimpleName(parser::ParseTree::Node parser_node) {
return nodes::Identifier(buildNode(parser_node),
nodes::Identifier build_simple_name(parser::ParseTree::Node parser_node) {
return nodes::Identifier(build_node(parser_node),
nodes::Identifier::SIMPLE_NAME,
parser_node.get_value());
}
nodes::Identifier buildSimpleType(parser::ParseTree::Node parser_node) {
return nodes::Identifier(buildNode(parser_node),
nodes::Identifier build_simple_type(parser::ParseTree::Node parser_node) {
return nodes::Identifier(build_node(parser_node),
nodes::Identifier::SIMPLE_TYPE,
parser_node.get_value());
}
nodes::Identifier buildTypeclass(parser::ParseTree::Node parser_node) {
return nodes::Identifier(buildNode(parser_node), nodes::Identifier::TYPECLASS,
nodes::Identifier build_typeclass(parser::ParseTree::Node parser_node) {
return nodes::Identifier(build_node(parser_node),
nodes::Identifier::TYPECLASS,
parser_node.get_value());
}
nodes::Identifier buildArgumentName(parser::ParseTree::Node parser_node) {
return nodes::Identifier(buildNode(parser_node),
nodes::Identifier build_argument_name(parser::ParseTree::Node parser_node) {
return nodes::Identifier(build_node(parser_node),
nodes::Identifier::ARGUMENT_NAME,
parser_node.get_value());
}
nodes::Identifier buildArgumentType(parser::ParseTree::Node parser_node) {
return nodes::Identifier(buildNode(parser_node),
nodes::Identifier build_argument_type(parser::ParseTree::Node parser_node) {
return nodes::Identifier(build_node(parser_node),
nodes::Identifier::ARGUMENT_TYPE,
parser_node.get_value());
}
// Annotations are used as strings
std::string buildAnnotation(parser::ParseTree::Node parser_node) {
std::string build_annotation(parser::ParseTree::Node parser_node) {
std::string identifier = parser_node.get_value();
// identifier.size() > 0 by parsing convention
@ -164,7 +165,7 @@ std::string buildAnnotation(parser::ParseTree::Node parser_node) {
return identifier;
}
nodes::Identifier buildOperator(parser::ParseTree::Node parser_node) {
nodes::Identifier build_operator(parser::ParseTree::Node parser_node) {
std::string identifier = parser_node.get_value();
if (identifier.size() > 0 && identifier.front() != '.') {
@ -174,12 +175,12 @@ nodes::Identifier buildOperator(parser::ParseTree::Node parser_node) {
}
}
return nodes::Identifier(buildNode(parser_node), nodes::Identifier::OPERATOR,
return nodes::Identifier(build_node(parser_node), nodes::Identifier::OPERATOR,
identifier);
}
nodes::Identifier buildPlaceholder(parser::ParseTree::Node parser_node) {
return nodes::Identifier(buildNode(parser_node),
return nodes::Identifier(build_node(parser_node),
nodes::Identifier::PLACEHOLDER, "_");
}