]> www.ginac.de Git - ginac.git/blobdiff - ginac/parser/parse_context.h
Allow underscores in identifiers.
[ginac.git] / ginac / parser / parse_context.h
index efcb6c620f309f0413f9f4e1279164eb4eda1c09..47b150c3638d3e8d7bbfc09b49b4e614bc971a9f 100644 (file)
@@ -1,14 +1,37 @@
-#ifndef _GINAC_PARSE_CONTEXT_HPP
-#define _GINAC_PARSE_CONTEXT_HPP
-#include <string>
-#include <cstddef> // size_t
+/** @file parse_context.h
+ *
+ *  Interface to parser context. */
+
+/*
+ *  GiNaC Copyright (C) 1999-2009 Johannes Gutenberg University Mainz, Germany
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef GINAC_PARSE_CONTEXT_H
+#define GINAC_PARSE_CONTEXT_H
+
 #include "ex.h"
 #include "symbol.h"
+
+#include <cstddef> // for size_t
 #include <map>
+#include <string>
 #include <utility>
 
-namespace GiNaC
-{
+namespace GiNaC {
 
 /**
  * Establishes correspondence between the strings and expressions.
@@ -59,6 +82,11 @@ typedef ex (*reader_func)(const exvector& args);
  *    number of arguments.
  * 3. User can extend the parser via custom prototype tables. It's possible
  *    to read user defined classes, create abbreviations, etc.
+ *
+ * NOTE: due to a hack that allows user defined functions to be parsed, the map
+ *       value of type reader_func is internally treated as an unsigned and not as a
+ *       function pointer!! The unsigned has to correspond to the serial number of
+ *       the defined GiNaC function.
  */
 typedef std::map<prototype, reader_func> prototype_table;
 
@@ -69,7 +97,6 @@ typedef std::map<prototype, reader_func> prototype_table;
  */
 extern const prototype_table& get_default_reader();
 
-}
-
-#endif // _GINAC_PARSE_CONTEXT_HPP
+} // namespace GiNaC
 
+#endif // GINAC_PARSE_CONTEXT_H