Implement parameterless prcoedures

This commit is contained in:
2025-01-11 13:32:37 +01:00
parent 35c32fcf3f
commit 0fcf29c17e
6 changed files with 260 additions and 113 deletions

View File

@ -32,6 +32,7 @@ namespace gcc
public:
void visit(source::program *program) override;
void visit(source::procedure_definition *definition) override;
void visit(source::call_statement *statement) override;
void visit(source::number_literal<std::int32_t> *literal) override;
void visit(source::number_literal<double> *literal) override;
@ -42,7 +43,7 @@ namespace gcc
void visit(source::unary_expression *expression) override;
void visit(source::constant_definition *definition) override;
void visit(source::type_definition *definition) override;
void visit(source::declaration *declaration) override;
void visit(source::variable_declaration *declaration) override;
void visit(source::variable_expression *expression) override;
void visit(source::array_access_expression *expression) override;
void visit(source::field_access_expression *expression) override;

View File

@ -33,7 +33,7 @@ namespace source
reference
};
class declaration;
class variable_declaration;
class constant_definition;
class procedure_definition;
class type_definition;
@ -64,7 +64,7 @@ namespace source
*/
struct parser_visitor
{
virtual void visit(declaration *) = 0;
virtual void visit(variable_declaration *) = 0;
virtual void visit(constant_definition *) = 0;
virtual void visit(procedure_definition *) = 0;
virtual void visit(type_definition *) = 0;
@ -97,7 +97,7 @@ namespace source
*/
struct empty_visitor : parser_visitor
{
virtual void visit(declaration *) override;
virtual void visit(variable_declaration *) override;
virtual void visit(constant_definition *definition) override;
virtual void visit(procedure_definition *definition) override;
virtual void visit(type_definition *definition) override;
@ -331,7 +331,7 @@ namespace source
/**
* Variable declaration.
*/
class declaration : public definition
class variable_declaration : public definition
{
type_expression *m_type;
@ -343,13 +343,13 @@ namespace source
* \param identifier Definition name.
* \param type Declared type.
*/
declaration(const struct position position, const std::string& identifier,
variable_declaration(const struct position position, const std::string& identifier,
type_expression *type);
virtual void accept(parser_visitor *visitor) override;
type_expression& type();
virtual ~declaration() override;
virtual ~variable_declaration() override;
};
/**
@ -380,7 +380,7 @@ namespace source
class procedure_definition : public definition
{
block *m_body;
std::vector<declaration *> m_parameters;
std::vector<variable_declaration *> m_parameters;
public:
/**
@ -393,7 +393,7 @@ namespace source
virtual void accept(parser_visitor *visitor) override;
block& body();
std::vector<declaration *>& parameters();
std::vector<variable_declaration *>& parameters();
virtual ~procedure_definition() override;
};
@ -597,18 +597,18 @@ namespace source
class block : public node
{
std::vector<definition *> m_definitions;
std::vector<declaration *> m_declarations;
statement *m_body;
public:
std::vector<definition *> value_definitions;
block(const struct position position, std::vector<definition *>&& definitions,
std::vector<declaration *>&& declarations,
std::vector<definition *>&& value_definitions,
statement *body);
virtual void accept(parser_visitor *visitor) override;
statement& body();
std::vector<definition *>& definitions();
std::vector<declaration *>& declarations();
virtual ~block() override;
};
@ -617,8 +617,7 @@ namespace source
{
public:
program(const struct position position, std::vector<definition *>&& definitions,
std::vector<declaration *>&& declarations,
statement *body);
std::vector<definition *>&& value_definitions, statement *body);
virtual void accept(parser_visitor *visitor) override;
};