tcalc 0.2.0
 
Loading...
Searching...
No Matches
tcalc::ast::EvalVisitor Class Reference

Visitor for evaluating AST. More...

#include <eval.hpp>

Inheritance diagram for tcalc::ast::EvalVisitor:
tcalc::ast::BaseVisitor< double >

Public Member Functions

 EvalVisitor (EvalContext &ctx)
 Construct a new Eval Visitor object.
 
error::Result< double > visit_bin_op (NodePtr< BinaryOpNode > &node) override
 Visit a binary operation node.
 
error::Result< double > visit_unary_op (NodePtr< UnaryOpNode > &node) override
 Visit a unary operation node.
 
error::Result< double > visit_number (NodePtr< NumberNode > &node) override
 Visit a number node.
 
error::Result< double > visit_varref (NodePtr< VarRefNode > &node) override
 Visit a variable reference node.
 
error::Result< double > visit_varassign (NodePtr< VarAssignNode > &node) override
 Visit a variable assignment node.
 
error::Result< double > visit_fcall (NodePtr< FcallNode > &node) override
 Visit a function call node.
 
error::Result< double > visit_fdef (NodePtr< FdefNode > &node) override
 Visit a function definition node.
 
error::Result< double > visit_if (NodePtr< IfNode > &node) override
 Visit an if node.
 
error::Result< double > visit_import (NodePtr< ProgramImportNode > &node) override
 Visit a program import node.
 
error::Result< double > visit_program (NodePtr< ProgramNode > &node) override
 Visit a program node.
 
- Public Member Functions inherited from tcalc::ast::BaseVisitor< double >
virtual error::Result< double > visit (NodePtr<> &node)
 Visit a number node.
 

Static Public Attributes

static const std::unordered_map< NodeType, std::function< double(double, double)> > BINOP_MAP
 
static const std::unordered_map< NodeType, std::function< double(double)> > UNARYOP_MAP
 

Detailed Description

Visitor for evaluating AST.

Constructor & Destructor Documentation

◆ EvalVisitor()

tcalc::ast::EvalVisitor::EvalVisitor ( EvalContext ctx)
inline

Construct a new Eval Visitor object.

Parameters
ctxEvaluation context.

Member Function Documentation

◆ visit_bin_op()

error::Result< double > tcalc::ast::EvalVisitor::visit_bin_op ( NodePtr< BinaryOpNode > &  node)
overridevirtual

Visit a binary operation node.

Parameters
nodeBinary operation node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_fcall()

error::Result< double > tcalc::ast::EvalVisitor::visit_fcall ( NodePtr< FcallNode > &  node)
overridevirtual

Visit a function call node.

Parameters
nodeFunction call node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_fdef()

error::Result< double > tcalc::ast::EvalVisitor::visit_fdef ( NodePtr< FdefNode > &  node)
overridevirtual

Visit a function definition node.

Parameters
nodeFunction definition node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_if()

error::Result< double > tcalc::ast::EvalVisitor::visit_if ( NodePtr< IfNode > &  node)
overridevirtual

Visit an if node.

Parameters
nodeIf node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_import()

error::Result< double > tcalc::ast::EvalVisitor::visit_import ( NodePtr< ProgramImportNode > &  node)
overridevirtual

Visit a program import node.

Parameters
nodeProgram import node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_number()

error::Result< double > tcalc::ast::EvalVisitor::visit_number ( NodePtr< NumberNode > &  node)
overridevirtual

Visit a number node.

Parameters
nodeNumber node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_program()

error::Result< double > tcalc::ast::EvalVisitor::visit_program ( NodePtr< ProgramNode > &  node)
overridevirtual

Visit a program node.

Parameters
nodeProgram node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_unary_op()

error::Result< double > tcalc::ast::EvalVisitor::visit_unary_op ( NodePtr< UnaryOpNode > &  node)
overridevirtual

Visit a unary operation node.

Parameters
nodeUnary operation node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_varassign()

error::Result< double > tcalc::ast::EvalVisitor::visit_varassign ( NodePtr< VarAssignNode > &  node)
overridevirtual

Visit a variable assignment node.

Parameters
nodeVariable assignment node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

◆ visit_varref()

error::Result< double > tcalc::ast::EvalVisitor::visit_varref ( NodePtr< VarRefNode > &  node)
overridevirtual

Visit a variable reference node.

Parameters
nodeVariable reference node.
Returns
error::Result<RT> Result of the visit.

Reimplemented from tcalc::ast::BaseVisitor< double >.

Member Data Documentation

◆ BINOP_MAP

const std::unordered_map<NodeType, std::function<double(double, double)> > tcalc::ast::EvalVisitor::BINOP_MAP
inlinestatic
Initial value:
= {
{ NodeType::BINARY_PLUS, std::plus<>() },
{ NodeType::BINARY_MINUS, std::minus<>() },
{ NodeType::BINARY_MULTIPLY, std::multiplies<>() },
{ NodeType::BINARY_DIVIDE, std::divides<>() },
{ NodeType::BINARY_EQUAL, _double_eq },
{ NodeType::BINARY_NOT_EQUAL, _double_noeq },
{ NodeType::BINARY_GREATER, std::greater<>() },
{ NodeType::BINARY_GREATER_EQUAL, std::greater_equal<>() },
{ NodeType::BINARY_LESS, std::less<>() },
{ NodeType::BINARY_LESS_EQUAL, std::less_equal<>() },
{ NodeType::BINARY_AND, std::logical_and<>() },
{ NodeType::BINARY_OR, std::logical_or<>() }
}

Map of binary operator to function.

◆ UNARYOP_MAP

const std::unordered_map<NodeType, std::function<double(double)> > tcalc::ast::EvalVisitor::UNARYOP_MAP
inlinestatic
Initial value:
= {
{ NodeType::UNARY_PLUS, _double_forward },
{ NodeType::UNARY_MINUS, std::negate<>() },
{ NodeType::UNARY_NOT, std::logical_not<>() }
}

Map of unary operator to function.


The documentation for this class was generated from the following files: