bl-compiler

compiler for the bl programming language.
Log | Files | Refs | README

ast_node.hpp (3364B)


      1 #pragma once
      2 
      3 #include "node_type.hpp"
      4 #include "type.hpp"
      5 
      6 #include <string>
      7 #include <vector>
      8 #include <memory>
      9 
     10 class ASTNode {
     11 public:
     12     int line;
     13     int col;
     14 
     15     virtual ~ASTNode() = default;
     16 }
     17 
     18 class ProgramNode : ASTNode {
     19 public:
     20     std::vector<FunctionDeclarationNode> function_declarations;
     21 
     22     ProgramNode(std::vector<FunctionDeclarationNode> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { }
     23 };
     24 
     25 class FunctionDeclarationNode : public ASTNode {
     26 public:
     27     std::string identifier;
     28     std::vector<ParameterNode> parameters;
     29     Type return_type;
     30     std::vector<StatementNode> body;
     31 
     32     FunctionDeclarationNode(std::string identifier, std::vector<ParameterNode> parameters, Type return_type, std::vector<StatementNode> body, int line, int col) : identifier(identifier), parameters(parameters), return_type(return_type), body(body), line(line), col(col) { }
     33 };
     34 
     35 class ParameterNode : public ASTNode {
     36 public:
     37     Type type;
     38     std::string identifier;
     39 
     40     ParameterNode(Type type, std::string identifier, int line, int column) : type(type), identifier(identifier), line(line), column(column) { }
     41 };
     42 
     43 class ArgumentNode : public ASTNode {
     44     ASTNode* expression;
     45     ASTNode* variable;
     46 
     47     ArgumentNode(ASTNode* expression, ASTNode* variable, int line int column) : expression(expression), variable(variable), line(line), column(column) { }
     48 };
     49 
     50 class VariableDeclarationNode : public ASTNode {
     51 public:
     52     Type type;
     53     std::string identifier;
     54     ASTNode* value;
     55 
     56     VariableDeclarationNode(Type type, std::string identifier, ASTNode* value, int line, int column) : type(type), identifier(identifier), value(value), line(line), column(column) { }
     57 };
     58 
     59 class VariableAssignmentNode : public ASTNode {
     60 public:
     61     std::string identifier;
     62     ASTNode* value;
     63 
     64     VariableAssignmentNode(std::string identifier, ASTNode* value, int line, int column) : identifier(identifier), value(value), line(line), column(column) { }
     65 };
     66 
     67 class ReturnNode : public ASTNode {
     68 public:
     69     ASTNode* expression;
     70 
     71     ReturnNode(ASTNode* expression, int line, int column) : expression(expression), line(line), column(column) { }
     72 };
     73 
     74 
     75 class BinaryOperationNode : public ASTNode {
     76     char operation;
     77     ASTNode* left;
     78     ASTNode* right;
     79 
     80     BinaryOperationNode(std::string operation, ASTNode* left, ASTNode* right, int line, int column) : operation(operation), left(left), right(right), line(line), column(column) { }
     81 };
     82 
     83 class UnaryOperationNode : public ASTNode {
     84     char operation;
     85     ASTNode* operand;
     86     
     87     UnaryOperationNode(char operation, ASTNode* operand, int line, int column) : operation(operation), operand(operand), line(line), column(column) { }
     88 };
     89 
     90 class StringLiteralNode : public ASTNode {
     91     std::string value;
     92 
     93     StringLiteralNode(std::string value, int line, int column) : value(value), line(line), column(column) { }
     94 };
     95 
     96 class NumberLiteralNode : public ASTNode {
     97     int value;
     98 
     99     NumberLiteralNode(int value, int line, int column) : value(value), line(line), column(column) { }
    100 };
    101 
    102 class ComparisonNode : public ASTNode {
    103     std::string operation;
    104     ASTNode* left;
    105     ASTNode* right;
    106 
    107     ComparisonNode(std::string operation, ASTNode* left, ASTNode* right, int line, int col) : operation(operation), left(left), right(right), line(line), column(column) { }
    108 };