Calculator  Step 4
Classes | Typedefs | Functions
variables.hpp File Reference
#include <map>
#include <string>
#include "node.hpp"

Go to the source code of this file.

Classes

class  set_symbol_table
 

Typedefs

typedef std::map< std::string,
node
symbol_table
 

Functions

node get_variable (std::string const &name)
 
node get_function (std::string const &name)
 
void set_variable (std::string const &name, node value)
 
void set_function (std::string const &name, node definition)
 

Typedef Documentation

typedef std::map<std::string, node> symbol_table

Represent a global or local symbol table, which stores variables and functions. In fact, there's no difference between a variable and a function of no arguments.

Definition at line 13 of file variables.hpp.

Function Documentation

node get_function ( std::string const &  name)

Get the definition of a function.

Parameters
nameThe function name
Returns
The definition of function named name
Exceptions
no_such_functionif the function is not defined

Definition at line 61 of file variables.cpp.

References find_symbol().

Referenced by node_function_call::evaluate_node().

62 {
63  node result{};
64  if (not find_symbol(name, result))
65  throw no_such_function{name};
66  else
67  return result;
68 }
bool find_symbol(std::string const &name, node &value)
Definition: variables.cpp:32
Definition: node.hpp:26
node get_variable ( std::string const &  name)

Get the value of a variable.

Parameters
nameThe variable name
Returns
The value of variable name or node() if the variable is undefined.

Definition at line 45 of file variables.cpp.

References find_symbol().

Referenced by BOOST_AUTO_TEST_CASE(), and node_identifier::evaluate_node().

46 {
47  node result{};
48  if (not find_symbol(name, result))
49  return node();
50  else if (result.get_parameters().empty())
51  return result;
52  else
53  throw function_error{name, result.get_parameters().size(), 0};
54 }
bool find_symbol(std::string const &name, node &value)
Definition: variables.cpp:32
Definition: node.hpp:26
void set_function ( std::string const &  name,
node  definition 
)

Set the definition of a function.

Parameters
nameThe function name
definitionThe function definition

Definition at line 70 of file variables.cpp.

References set_variable().

Referenced by BOOST_AUTO_TEST_CASE(), and parser::get_statement().

71 {
72  set_variable(name, value);
73 }
void set_variable(std::string const &name, node value)
Definition: variables.cpp:56
void set_variable ( std::string const &  name,
node  value 
)

Set the value of a variable.

Parameters
nameThe variable name
valueThe value. if the variable is already defined, changes its value.

Definition at line 56 of file variables.cpp.

Referenced by BOOST_AUTO_TEST_CASE(), and set_function().

57 {
58  variables[name] = value;
59 }