-// Table of all used symbols
-typedef map<string, ex> sym_tab;
+// Table of all used symbols/indices
+struct sym_def {
+ sym_def() : predefined(false) {}
+ sym_def(const ex &s, bool predef) : sym(s), predefined(predef) {}
+ ~sym_def() {}
+
+ sym_def(const sym_def &other) {sym = other.sym; predefined = other.predefined;}
+ const sym_def &operator=(const sym_def &other)
+ {
+ if (this != &other) {
+ sym = other.sym;
+ predefined = other.predefined;
+ }
+ return *this;
+ }
+
+ ex sym;
+ bool predefined; // true = user supplied symbol, false = lexer generated symbol
+};
+typedef std::map<std::string, sym_def> sym_tab;