Plot Script
environment.hpp
Go to the documentation of this file.
1 
10 #ifndef ENVIRONMENT_HPP
11 #define ENVIRONMENT_HPP
12 
13 // system includes
14 #include <map>
15 
16 // module includes
17 #include "atom.hpp"
18 #include "expression.hpp"
19 
24 typedef Expression (*Procedure)(const std::vector<Expression> & args);
25 
40 class Environment {
41 public:
44  Environment();
45 
50  bool is_known(const Atom &sym) const;
51 
57  bool is_exp(const Atom &sym) const;
58 
63  Expression get_exp(const Atom &sym) const;
64 
69  void add_exp(const Atom &sym, const Expression &exp);
70 
75  bool is_proc(const Atom &sym) const;
76 
84  Procedure get_proc(const Atom &sym) const;
85 
87  void reset();
88 
89 private:
90 
91  // Environment is a mapping from symbols to expressions or procedures
92  enum EnvResultType { ExpressionType, ProcedureType };
93 
94  struct EnvResult {
95  EnvResultType type;
96  Expression exp; // used when type is ExpressionType
97  Procedure proc; // used when type is ProcedureType
98 
99  // constructors for use in container emplace
100  EnvResult(){};
101  EnvResult(EnvResultType t, Expression e) : type(t), exp(e){};
102  EnvResult(EnvResultType t, Procedure p) : type(t), proc(p){};
103  };
104 
105  // the environment map
106  std::map<std::string, EnvResult> envmap;
107 };
108 
109 #endif
Expression(* Procedure)(const std::vector< Expression > &args)
A Procedure is a C++ function pointer taking a vector of Expressions as arguments and returning an Ex...
Definition: environment.hpp:24
bool is_exp(const Atom &sym) const
Definition: environment.cpp:120
Expression get_exp(const Atom &sym) const
Definition: environment.cpp:127
An expression is a tree of Atoms.
Definition: expression.hpp:22
bool is_proc(const Atom &sym) const
Definition: environment.cpp:155
A class representing the interpreter environment.
Definition: environment.hpp:40
A variant type that may be a Number or Symbol or the default type None.
Definition: atom.hpp:14
void add_exp(const Atom &sym, const Expression &exp)
Definition: environment.cpp:141
bool is_known(const Atom &sym) const
Definition: environment.cpp:114
Procedure get_proc(const Atom &sym) const
Definition: environment.cpp:162
void reset()
Definition: environment.cpp:180
Environment()
Definition: environment.cpp:109