mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-26 16:58:46 +00:00
expression builders finished, type builders started
This commit is contained in:
parent
6682e0beb1
commit
535d8d26c3
12 changed files with 909 additions and 76 deletions
|
|
@ -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, "_");
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue