#ifndef parser_H
#define parser_H

#include "tw_types.h"

extern int parser_debug;

class Parser {
	public :
		LineStream 	*p_stream;
		Text	 	*p_text;
		char	 	*p_string;

		char		*p_line;
		char		*p_token;
		char		*p_pos;
		char		*p_val;
		Text		*p_error;
		int		p_fatal;

		Text		*p_matched;
		int		p_matched_noindent;
		int		p_eof;
		int		p_debug;
	
		Parser( );
		Parser( LineStream *InitStream );
		Parser( Text  *InitText );
		Parser( char *InitString );

		virtual ~Parser();

		virtual void InitParser();
		virtual void purge();

		virtual void NewStream( LineStream *InitStream );
		virtual void NewStream( Text  *InitText );
		virtual void NewStream( char *InitString );

		virtual void debug(char *str);
		virtual char *next();
		virtual int terminal(char *token);
		virtual char *id();
		virtual char *num();
		virtual Text *match();
		virtual Text *matchexp();
		virtual int true();
		virtual int false();
		virtual int line_comment();
		virtual int comment();
		virtual int error(
			char *s1 = 0,char *s2 = 0, char *s3 = 0,
			char *s4 = 0,char *s5 = 0, char *s6 = 0,
			char *s7 = 0,char *s8 = 0, char *s9 = 0);
		virtual int message(char *str,
			char *s1=0,char *s2=0,char *s3=0,
			char *s4=0,char *s5=0,char *s6=0,
			char *s7=0,char *s8=0,char *s9=0);
		virtual int eof();
	};

#endif
