--- /dev/null
+
+#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__