Skip to content

Commit

Permalink
♻️ Refactor BuiltInTypes and BuiltnInValues
Browse files Browse the repository at this point in the history
refactor: refactor implementation of values and objects in Lang language
  • Loading branch information
AdsonFS committed Sep 7, 2024
1 parent b7faaf6 commit f8245b9
Show file tree
Hide file tree
Showing 15 changed files with 442 additions and 273 deletions.
15 changes: 15 additions & 0 deletions examples/refactor.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
var cnt -> number;
var count -> number := 2;
var name -> string := "John";

func print() -> {
>> "Hello World!";
cnt := count := 0;
>> "Hello World!";
while(cnt < 10) {
cnt := cnt + 1;
>> "Name:" >> name;
}
}

print();
40 changes: 20 additions & 20 deletions src/ast/ast.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,53 @@
#include "../error/error.h"
#include "visitor.h"

ASTValue AST::accept(ASTVisitor &visitor) {
ASTValue* AST::accept(ASTVisitor &visitor) {
throw RuntimeError("not implemented");
}
ASTValue StatementListAST::accept(ASTVisitor &visitor) {
ASTValue* StatementListAST::accept(ASTVisitor &visitor) {
return visitor.visitStatementList(this);
}
ASTValue BlockAST::accept(ASTVisitor &visitor) { return visitor.visitBLock(this); }
ASTValue ReturnAST::accept(ASTVisitor &visitor) { return visitor.visitReturn(this); }
ASTValue WhileStatementAST::accept(ASTVisitor &visitor) {
ASTValue* BlockAST::accept(ASTVisitor &visitor) { return visitor.visitBLock(this); }
ASTValue* ReturnAST::accept(ASTVisitor &visitor) { return visitor.visitReturn(this); }
ASTValue* WhileStatementAST::accept(ASTVisitor &visitor) {
return visitor.visitWhileStatement(this);
}
ASTValue ForStatementAST::accept(ASTVisitor &visitor) {
ASTValue* ForStatementAST::accept(ASTVisitor &visitor) {
return visitor.visitForStatement(this);
}
ASTValue IfStatementAST::accept(ASTVisitor &visitor) {
ASTValue* IfStatementAST::accept(ASTVisitor &visitor) {
return visitor.visitIfStatement(this);
}
ASTValue FunctionDeclarationAST::accept(ASTVisitor &visitor) {
ASTValue* FunctionDeclarationAST::accept(ASTVisitor &visitor) {
return visitor.visitFunctionDeclaration(this);
}
ASTValue OutputStreamAST::accept(ASTVisitor &visitor) {
ASTValue* OutputStreamAST::accept(ASTVisitor &visitor) {
return visitor.visitOutputStream(this);
}
ASTValue InputStreamAST::accept(ASTVisitor &visitor) {
ASTValue* InputStreamAST::accept(ASTVisitor &visitor) {
return visitor.visitInputStream(this);
}
ASTValue VariableDeclarationAST::accept(ASTVisitor &visitor) {
ASTValue* VariableDeclarationAST::accept(ASTVisitor &visitor) {
return visitor.visitVariableDeclaration(this);
}
ASTValue AssignmentVariableAST::accept(ASTVisitor &visitor) {
ASTValue* AssignmentVariableAST::accept(ASTVisitor &visitor) {
return visitor.visitAssignmentVariable(this);
}
ASTValue BinaryOperatorAST::accept(ASTVisitor &visitor) {
ASTValue* BinaryOperatorAST::accept(ASTVisitor &visitor) {
return visitor.visitBinaryOperatorExpr(this);
}
ASTValue UnaryOperatorAST::accept(ASTVisitor &visitor) {
ASTValue* UnaryOperatorAST::accept(ASTVisitor &visitor) {
return visitor.visitUnaryOperatorExpr(this);
}
ASTValue CallAST::accept(ASTVisitor &visitor) { return visitor.visitCall(this); }
ASTValue IdentifierAST::accept(ASTVisitor &visitor) {
ASTValue* CallAST::accept(ASTVisitor &visitor) { return visitor.visitCall(this); }
ASTValue* IdentifierAST::accept(ASTVisitor &visitor) {
return visitor.visitIdentifier(this);
}
ASTValue NumberAST::accept(ASTVisitor &visitor) {
ASTValue* NumberAST::accept(ASTVisitor &visitor) {
return visitor.visitNumberExpr(this);
}
ASTValue StringAST::accept(ASTVisitor &visitor) {
ASTValue* StringAST::accept(ASTVisitor &visitor) {
return visitor.visitStringExpr(this);
}
ASTValue VoidAST::accept(ASTVisitor &visitor) { return visitor.visitVoid(this); }
ASTValue NilAST::accept(ASTVisitor &visitor) { return visitor.visitNil(this); }
ASTValue* VoidAST::accept(ASTVisitor &visitor) { return visitor.visitVoid(this); }
ASTValue* NilAST::accept(ASTVisitor &visitor) { return visitor.visitNil(this); }
40 changes: 20 additions & 20 deletions src/ast/ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@

class AST {
public:
virtual ASTValue accept(ASTVisitor &visitor);
virtual ASTValue* accept(ASTVisitor &visitor);
};

class StatementListAST : public AST {
public:
StatementListAST(std::vector<AST *> statements) : statements(statements) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

std::vector<AST *> statements;
};
Expand All @@ -29,7 +29,7 @@ class WhileStatementAST : public AST {
public:
WhileStatementAST(AST *condition, StatementListAST *ifStatements)
: condition(condition), ifStatements(ifStatements) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

AST *condition;
StatementListAST *ifStatements;
Expand All @@ -41,7 +41,7 @@ class ForStatementAST : public AST {
StatementListAST *ifStatements)
: initializer(initializer), condition(condition), increment(increment),
statements(ifStatements) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

AST *initializer;
AST *condition;
Expand All @@ -52,15 +52,15 @@ class ForStatementAST : public AST {
class BlockAST : public AST {
public:
BlockAST(std::vector<AST *> statements) : statements(statements) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

std::vector<AST *> statements;
};

class ReturnAST : public AST {
public:
ReturnAST(AST *value) : value(value) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

AST *value;
};
Expand All @@ -71,7 +71,7 @@ class IfStatementAST : public AST {
StatementListAST *elseStatements)
: condition(condition), ifStatements(ifStatements),
elseStatements(elseStatements) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

AST *condition;
StatementListAST *ifStatements;
Expand All @@ -82,7 +82,7 @@ class FunctionDeclarationAST : public AST {
public:
FunctionDeclarationAST(Token identifier, std::string type, StatementListAST *statements)
: identifier(identifier), type(type), statements(statements) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token identifier;
std::string type;
Expand All @@ -92,15 +92,15 @@ class FunctionDeclarationAST : public AST {
class OutputStreamAST : public AST {
public:
OutputStreamAST(std::vector<AST *> outputs) : outputs(outputs) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

std::vector<AST *> outputs;
};

class InputStreamAST : public AST {
public:
InputStreamAST(std::vector<Token> identifiers) : identifiers(identifiers) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

std::vector<Token> identifiers;
};
Expand All @@ -109,7 +109,7 @@ class VariableDeclarationAST : public AST {
public:
VariableDeclarationAST(Token type, Token identifier, AST *value)
: type(type), identifier(identifier), value(value) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token type;
Token identifier;
Expand All @@ -120,7 +120,7 @@ class AssignmentVariableAST : public AST {
public:
AssignmentVariableAST(Token identifier, AST *value)
: identifier(identifier), value(value) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token identifier;
AST *value;
Expand All @@ -130,7 +130,7 @@ class BinaryOperatorAST : public AST {
public:
BinaryOperatorAST(AST *left, AST *right, Token op)
: left(left), right(right), op(op) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;
AST *left;
AST *right;
Token op;
Expand All @@ -139,7 +139,7 @@ class BinaryOperatorAST : public AST {
class UnaryOperatorAST : public AST {
public:
UnaryOperatorAST(AST *child, Token op) : child(child), op(op) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

AST *child;
Token op;
Expand All @@ -149,7 +149,7 @@ class CallAST : public AST {
public:
CallAST(Token identifier, std::vector<AST *> arguments)
: identifier(identifier), arguments(arguments) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token identifier;
std::vector<AST *> arguments;
Expand All @@ -158,37 +158,37 @@ class CallAST : public AST {
class IdentifierAST : public AST {
public:
IdentifierAST(Token token) : token(token) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token token;
};

class NumberAST : public AST {
public:
NumberAST(Token token) : token(token) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token token;
};

class StringAST : public AST {
public:
StringAST(Token token) : token(token) {}
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;

Token token;
};

class VoidAST : public AST {
public:
VoidAST(){};
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;
};

class NilAST : public AST {
public:
NilAST(){};
ASTValue accept(ASTVisitor &visitor) override;
ASTValue* accept(ASTVisitor &visitor) override;
};

#endif // !AST_H
Loading

0 comments on commit f8245b9

Please sign in to comment.