/*
Adriane Boyd

Declarations and definitions for Parser class.

*/

#ifndef _PARSER
#define _PARSER

#include "tlist.h"
#include "grammar.h"
#include "lexicon.h"

#define MAX_DERIV 100

class Parser
{
	public:
		Parser();
		~Parser();

		int parse(TList *, Grammar *, Lexicon *);

	private:
		void cleanup();
		void init();
		TList *wordsToLex(TList *, Lexicon *);
		int process(TList *, Grammar *);
		void expand(TList *, Grammar *);
		void reduce(TList *, int);

		int numderiv;
		TList *derivarray[MAX_DERIV];
		TList *derivrules[MAX_DERIV];
};

#endif
