]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mathml_editor/src/TPushParser.hh
Initial revision
[helm.git] / helm / DEVEL / mathml_editor / src / TPushParser.hh
diff --git a/helm/DEVEL/mathml_editor/src/TPushParser.hh b/helm/DEVEL/mathml_editor/src/TPushParser.hh
new file mode 100644 (file)
index 0000000..bb659c3
--- /dev/null
@@ -0,0 +1,70 @@
+
+#ifndef __TPushParser_hh__
+#define __TPushParser_hh__
+
+#include <list>
+#include <stack>
+#include "TToken.hh"
+#include "APushParser.hh"
+#include "TDictionary.hh"
+#include "TDocument.hh"
+#include "TNode.hh"
+
+class TPushParser : public APushParser
+{
+public:
+  TPushParser(const class TDictionary&);
+  TPushParser(const class TDictionary&, class TListener&);
+  virtual ~TPushParser();
+
+  virtual void push(const TToken&);
+  virtual void setCursor(const std::string&);
+
+  TDocument document(void) const { return doc; }
+
+private:
+  void init(void);
+
+  std::string PRIME(void) const;
+  bool isPrimes(const TNode&) const;
+
+  void do_begin(void);
+  void do_end(void);
+  void do_shift(void);
+  void do_align(void);
+  void do_eol(void);
+  void do_parameter(const std::string&);
+  void do_superscript(void);
+  void do_subscript(void);
+  void do_space(const std::string&);
+  void do_letter(const std::string&);
+  void do_digit(const std::string&);
+  void do_other(const std::string&);
+  void do_active(const std::string&);
+  void do_comment(void);
+  void do_control(const std::string&);
+
+  void do_cr(void);
+  void do_apostrophe(void);
+  void advance(const TNode&);
+
+  void process(const TToken&);
+
+  struct Frame
+  {
+    Frame(const TDictionary::Entry& e) : entry(e), pos(0) { };
+    const TDictionary::Entry& entry;
+    unsigned pos;
+  };
+
+  std::stack<Frame> frames;
+  std::list<TToken> buffer;
+  unsigned  nextId;
+  TDocument doc;
+  TNode     cursor;
+
+  const class TDictionary& dictionary;
+  class TListener* listener;
+};
+
+#endif // __TPushParser_hh__