mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-26 16:58:46 +00:00
or references, prining improvements, comments now printed, fixes
This commit is contained in:
parent
73263193a9
commit
5e70f0015f
19 changed files with 354 additions and 429 deletions
|
|
@ -46,16 +46,36 @@ nodes::Modifier build_modifier(parser::ParseTree::Node parser_node) {
|
|||
return nodes::Modifier::OPTIONAL;
|
||||
} else if (modifier == "!") {
|
||||
return nodes::Modifier::RESULT;
|
||||
} else if (modifier == "->" || modifier == "out") {
|
||||
return nodes::Modifier::OUT;
|
||||
} else if (modifier == "<-" || modifier == "in") {
|
||||
return nodes::Modifier::IN;
|
||||
} else if (modifier == "<>" || modifier == "ref") {
|
||||
return nodes::Modifier::REF;
|
||||
} else if (modifier == "|->" || modifier == "or_out") {
|
||||
return nodes::Modifier::OR_OUT;
|
||||
} else if (modifier == "<-|" || modifier == "or_in") {
|
||||
return nodes::Modifier::OR_IN;
|
||||
} else if (modifier == "--" || modifier == "const") {
|
||||
return nodes::Modifier::CONST;
|
||||
} else if (modifier == "->" || modifier == "out") {
|
||||
return nodes::Modifier::OUT;
|
||||
} else if (modifier == "<-|<>" || modifier == "in|ref") {
|
||||
return nodes::Modifier::IN_OR_REF;
|
||||
} else if (modifier == "<-|--" || modifier == "in|const") {
|
||||
return nodes::Modifier::IN_OR_CONST;
|
||||
} else if (modifier == "<>|->" || modifier == "ref|out") {
|
||||
return nodes::Modifier::REF_OR_OUT;
|
||||
} else if (modifier == "--|->" || modifier == "const|out") {
|
||||
return nodes::Modifier::CONST_OR_OUT;
|
||||
} else if (modifier == "<>|--" || modifier == "ref|const") {
|
||||
return nodes::Modifier::REF_OR_CONST;
|
||||
} else if (modifier == "<-|->" || modifier == "in|out") {
|
||||
return nodes::Modifier::IN_OR_OUT;
|
||||
} else if (modifier == "<-|<>|->" || modifier == "in|ref|out") {
|
||||
return nodes::Modifier::IN_OR_REF_OR_OUT;
|
||||
} else if (modifier == "<-|--|->" || modifier == "in|const|out") {
|
||||
return nodes::Modifier::IN_OR_CONST_OR_OUT;
|
||||
} else if (modifier == "<-|<>|--" || modifier == "in|ref|const") {
|
||||
return nodes::Modifier::IN_OR_REF_OR_CONST;
|
||||
} else if (modifier == "<>|--|->" || modifier == "ref|const|out") {
|
||||
return nodes::Modifier::REF_OR_CONST_OR_OUT;
|
||||
} else if (modifier == "<-|<>|--|->" || modifier == "in|ref|const|out") {
|
||||
return nodes::Modifier::IN_OR_REF_OR_CONST_OR_OUT;
|
||||
} else {
|
||||
return nodes::Modifier::NONE;
|
||||
}
|
||||
|
|
@ -244,11 +264,31 @@ nodes::Identifier build_placeholder(parser::ParseTree::Node parser_node) {
|
|||
nodes::Identifier::PLACEHOLDER, "_");
|
||||
}
|
||||
|
||||
// --- extra
|
||||
|
||||
nodes::Extra build_extra(parser::ParseTree::Node parser_node) {
|
||||
return nodes::Extra(build_node(parser_node), parser_node.get_value());
|
||||
}
|
||||
|
||||
// --- empty lines
|
||||
|
||||
nodes::EmptyLines build_empty_lines(parser::ParseTree::Node parser_node) {
|
||||
return nodes::EmptyLines(build_node(parser_node),
|
||||
parser_node.get_value_length() - 1);
|
||||
std::string empty_lines = parser_node.get_value();
|
||||
|
||||
size_t empty_lines_count = 0;
|
||||
|
||||
for (auto &ch : empty_lines) {
|
||||
if (ch == '\n') {
|
||||
++empty_lines_count;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty_lines_count == 0) {
|
||||
error_handling::handle_parsing_error("Empty lines node with zero new lines",
|
||||
parser_node);
|
||||
}
|
||||
|
||||
return nodes::EmptyLines(build_node(parser_node), empty_lines_count - 1);
|
||||
}
|
||||
|
||||
} // namespace builders
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue