Write parts of generated code directly to objects

This commit is contained in:
2024-03-18 09:55:25 +01:00
parent 17b0650f77
commit bfabdb1d08
7 changed files with 246 additions and 189 deletions

View File

@ -60,6 +60,11 @@ namespace elna::source
block->body().accept(this);
}
void empty_visitor::visit(program *program)
{
visit(dynamic_cast<block *>(program));
}
void empty_visitor::visit(binary_expression *expression)
{
expression->lhs().accept(this);
@ -154,6 +159,18 @@ namespace elna::source
return m_table;
}
program::program(std::vector<std::unique_ptr<definition>>&& definitions,
std::vector<std::unique_ptr<declaration>>&& declarations,
std::unique_ptr<statement>&& body)
: block(std::move(definitions), std::move(declarations), std::move(body))
{
}
void program::accept(parser_visitor *visitor)
{
visitor->visit(this);
}
integer_literal::integer_literal(const std::int32_t value)
: m_number(value)
{
@ -352,9 +369,18 @@ namespace elna::source
{
}
std::unique_ptr<block> parser::parse()
std::unique_ptr<program> parser::parse()
{
return parse_block();
auto definitions = parse_definitions();
auto declarations = parse_declarations();
auto parsed_statement = parse_statement();
if (parsed_statement == nullptr)
{
return nullptr;
}
return std::make_unique<program>(std::move(definitions),
std::move(declarations), std::move(parsed_statement));
}
const std::list<std::unique_ptr<error>>& parser::errors() const noexcept