#ifndef PARSER_HPP 
#define PARSER_HPP

#include <string>
#include <sstream>
#include "node.hpp"

class Parser : public std::istringstream {
	private:
		enum {
			NUM, VART, LFT, RGT, 
			ADD, SUB, MUL, DIV, POW, 
			SIN, COS, ATAN, LOG, EXP, SQRT, DER, 
			LPAR, RPAR, SEMI, BAD
		};
		int   ch;
		int   tok;
		Node *lft;
		Node *rgt;
		double   num;
		void  error(const char*);
		void  Lex(void);
		Node* param(void);
		Node* prim(void);
		Node* factor(void);
		Node* term(void);
		Node* expr(void);

	public:
		Parser(const std::string&, Node*, Node*);
		~Parser(void);
		Node* Tree(void);
};

#endif

