Implement division

This commit is contained in:
2024-03-09 08:36:07 +01:00
parent fe805ca893
commit a3e3be5ec7
25 changed files with 357 additions and 245 deletions

View File

@ -6,7 +6,7 @@ namespace elna::source
/**
* AST node.
*/
void node::accept(ParserVisitor *)
void node::accept(parser_visitor *)
{
}
@ -15,7 +15,7 @@ namespace elna::source
{
}
void definition::accept(ParserVisitor *visitor)
void definition::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
@ -35,7 +35,7 @@ namespace elna::source
{
}
void block::accept(ParserVisitor *visitor)
void block::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
@ -55,7 +55,7 @@ namespace elna::source
{
}
void integer_literal::accept(ParserVisitor *visitor)
void integer_literal::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
@ -70,7 +70,7 @@ namespace elna::source
{
}
void variable_expression::accept(ParserVisitor *visitor)
void variable_expression::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
@ -103,7 +103,7 @@ namespace elna::source
}
}
void binary_expression::accept(ParserVisitor *visitor)
void binary_expression::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
@ -128,7 +128,7 @@ namespace elna::source
{
}
void bang_statement::accept(ParserVisitor *visitor)
void bang_statement::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
@ -182,16 +182,16 @@ namespace elna::source
{
return lhs;
}
auto _operator = tokens->identifier()[0];
++tokens;
auto rhs = parse_factor();
if (rhs != nullptr)
while (tokens->of() == source::token::type::factor_operator)
{
return std::make_unique<binary_expression>(std::move(lhs),
auto _operator = tokens->identifier()[0];
++tokens;
auto rhs = parse_factor();
lhs = std::make_unique<binary_expression>(std::move(lhs),
std::move(rhs), _operator);
}
return nullptr;
return lhs;
}
std::unique_ptr<expression> parser::parse_expression()
@ -201,17 +201,16 @@ namespace elna::source
{
return term;
}
auto _operator = tokens->identifier()[0];
++tokens;
auto rhs = parse_expression();
if (rhs != nullptr)
while (tokens->of() == source::token::type::term_operator)
{
return std::make_unique<binary_expression>(std::move(term),
auto _operator = tokens->identifier()[0];
++tokens;
auto rhs = parse_term();
term = std::make_unique<binary_expression>(std::move(term),
std::move(rhs), _operator);
}
return nullptr;
return term;
}
std::unique_ptr<definition> parser::parse_definition()