/* SI 413 Fall 2011 * C++ header file for the SymbolTable class * Supports dynamic scope */ #ifndef ST_HPP #define ST_HPP #include <iostream> #include <map> #include <string> using namespace std; #include "value.hpp" /* This class represents a simple global symbol table. * Later we will extend it to support dynamic scoping. */ class SymbolTable { private: // The actual map. It is declared private, so it can only // be accessed via the public methods below. map<string,Value> bindings; public: // Creates a new, empty symbol table SymbolTable() { } // Returns the Value bound to the given name. Value lookup(string name); // Creates a new name-value binding void bind(string name, Value val = Value()); // Re-defines the value bound to the given name. void rebind(string name, Value val); }; // This global variable is the actual global symbol table object. // It is actually declared in the st.cpp file, so we put keyword "extern" // here. extern SymbolTable ST; #endif // ST_HPP