tcalc 0.2.0
 
Loading...
Searching...
No Matches
node.hpp File Reference

Base class for AST nodes. More...

#include <cctype>
#include <cstdint>
#include <memory>
#include <string>
#include <type_traits>
#include <unordered_map>
#include "tcalc/common.hpp"

Go to the source code of this file.

Classes

class  tcalc::ast::Node
 Base class for AST nodes. More...
 

Typedefs

template<typename NT = Node, typename = std::enable_if_t<std::is_base_of_v<Node, NT>>>
using tcalc::ast::NodePtr = std::shared_ptr< NT >
 Shared pointer to a node.
 

Enumerations

enum class  tcalc::ast::NodeType : uint8_t {
  BINARY_PLUS , BINARY_MINUS , BINARY_MULTIPLY , BINARY_DIVIDE ,
  BINARY_EQUAL , BINARY_NOT_EQUAL , BINARY_GREATER , BINARY_GREATER_EQUAL ,
  BINARY_LESS , BINARY_LESS_EQUAL , BINARY_AND , BINARY_OR ,
  UNARY_PLUS , UNARY_MINUS , UNARY_NOT , NUMBER ,
  VARREF , VARASSIGN , FCALL , FDEF ,
  IF , PROGRAM , IMPORT
}
 AST node type. More...
 

Variables

const std::unordered_map< NodeType, std::string > tcalc::ast::NODE_TYPE_NAMES
 

Detailed Description

Base class for AST nodes.

Author
Dessera (desse.nosp@m.ra@q.nosp@m.q.com)
Version
0.2.0
Date
2025-06-15

Typedef Documentation

◆ NodePtr

template<typename NT = Node, typename = std::enable_if_t<std::is_base_of_v<Node, NT>>>
using tcalc::ast::NodePtr = typedef std::shared_ptr<NT>

Shared pointer to a node.

Template Parameters
NTNode type.

Enumeration Type Documentation

◆ NodeType

enum class tcalc::ast::NodeType : uint8_t
strong

AST node type.

Enumerator
BINARY_PLUS 

Binary plus operator.

BINARY_MINUS 

Binary minus operator.

BINARY_MULTIPLY 

Binary multiply operator.

BINARY_DIVIDE 

Binary divide operator.

BINARY_EQUAL 

Binary equal operator.

BINARY_NOT_EQUAL 

Binary not equal operator.

BINARY_GREATER 

Binary greater operator.

BINARY_GREATER_EQUAL 

Binary greater equal operator.

BINARY_LESS 

Binary less operator.

BINARY_LESS_EQUAL 

Binary less equal operator.

BINARY_AND 

Binary and operator.

BINARY_OR 

Binary or operator.

UNARY_PLUS 

Unary plus operator.

UNARY_MINUS 

Unary minus operator.

UNARY_NOT 

Unary not operator.

NUMBER 

Constant number.

VARREF 

Variable reference.

VARASSIGN 

Variable assignment.

FCALL 

Function call.

FDEF 

Function definition.

IF 

If statement.

PROGRAM 

Program.

IMPORT 

Import statement.

Variable Documentation

◆ NODE_TYPE_NAMES

const std::unordered_map<NodeType, std::string> tcalc::ast::NODE_TYPE_NAMES
inline
Initial value:
= {
{ NodeType::BINARY_PLUS, "BINARY_PLUS" },
{ NodeType::BINARY_MINUS, "BINARY_MINUS" },
{ NodeType::BINARY_MULTIPLY, "BINARY_MULTIPLY" },
{ NodeType::BINARY_DIVIDE, "BINARY_DIVIDE" },
{ NodeType::BINARY_EQUAL, "BINARY_EQUAL" },
{ NodeType::BINARY_NOT_EQUAL, "BINARY_NOT_EQUAL" },
{ NodeType::BINARY_GREATER, "BINARY_GREATER" },
{ NodeType::BINARY_GREATER_EQUAL, "BINARY_GREATER_EQUAL" },
{ NodeType::BINARY_LESS, "BINARY_LESS" },
{ NodeType::BINARY_LESS_EQUAL, "BINARY_LESS_EQUAL" },
{ NodeType::BINARY_AND, "BINARY_AND" },
{ NodeType::BINARY_OR, "BINARY_OR" },
{ NodeType::UNARY_PLUS, "UNARY_PLUS" },
{ NodeType::UNARY_MINUS, "UNARY_MINUS" },
{ NodeType::UNARY_NOT, "UNARY_NOT" },
{ NodeType::NUMBER, "NUMBER" },
{ NodeType::VARREF, "VARREF" },
{ NodeType::VARASSIGN, "VARASSIGN" },
{ NodeType::FCALL, "FCALL" },
{ NodeType::FDEF, "FDEF" },
{ NodeType::IF, "IF" },
{ NodeType::PROGRAM, "PROGRAM" },
{ NodeType::IMPORT, "IMPORT" },
}

Node type names.