#include #include namespace LXC::AST { typedef std::string Identifier; class FunctionCall final : public NodeValue { private: // The name of the function // Identifier m_FuncName; // The arguments of the function // std::vector> m_Arguments; }; class IntLiteral final : public NodeValue { private: // Yes numbers are stored as strings // std::string m_NumberValue; }; class Operation final : public NodeValue { private: // The sides of the operation // std::unique_ptr m_Lhs, m_Rhs; // The operand of the operation // Lexer::Token::TokenType m_Operand; }; class VarDeclaration final : public Node { private: // The name of the variable // Identifier m_Name; // Default value of the variable (nullable) // std::unique_ptr m_Value; }; class VarAssignment final : public Node { private: // The name of the variable // Identifier m_Name; // Value to assign to the variable // std::unique_ptr m_Value; }; class VarAccess final : public NodeValue { private: // The name of the variable // Identifier m_Name; }; class IfBranch final : public Node { private: // The condition of the branch // std::unique_ptr m_Condition; // The body of the if-statement // std::vector> m_Body; }; class ReturnStatement final : public Node { private: // The value to return (nullable) // std::unique_ptr m_ReturnValue; }; }