// parssppt.h            see license.txt for copyright and terms of use
// parser-support routines, for use at runtime while processing
// the generated Parse tree
//
// this module is primarily for use with the C and C++ grammars,
// but has been pressed into service for a few other uses too;
// new grammars and parsers should probably not use this



//                  alt.parssppt.die.die.die!

// TODO:  This is a stupid module: ill-conceived, and awkward to use.
// It either needs to be rewritten, or its functionality spread to
// other modules.



#ifndef PARSSPPT_H
#define PARSSPPT_H

#include "lexer.h"        // Lexer
#include "useract.h"      // SemanticValue, UserAction

class ParseTables;
class GLR;
class LexerInterface;


// ----------------- helpers for analysis drivers ---------------
// a self-contained parse tree (or parse DAG, as the case may be)
class ParseTreeAndTokens {
public:
  // reference to place to store final semantic value
  SemanticValue &treeTop;

  // just replacing Lexer2 with Lexer for now..
  LexerInterface *lexer;           // (owner)

  // parse parameter
  UserActions *userAct;            // (serf)

  // parse tables (or NULL)
  ParseTables *tables;             // (serf)

public:
  ParseTreeAndTokens(CCLang &lang, SemanticValue &top, StringTable &extTable,
                     char const *inputFname);
  ~ParseTreeAndTokens();
};


bool glrParseNamedFile(GLR &glr, LexerInterface &lexer, SemanticValue &treeTop,
                       char const *inputFname);

// dsw: what is this?
//  // given grammar and input, yield a parse tree
//  // returns false on error
//  bool toplevelParse(ParseTreeAndTokens &ptree, char const *grammarFname,
//                     char const *inputFname, char const *symOfInterestName);

bool toplevelParse(ParseTreeAndTokens &ptree, char const *inputFname);

char *processArgs(int argc, char **argv, char const *additionalInfo = NULL);

void maybeUseTrivialActions(ParseTreeAndTokens &ptree);

// useful for simple treewalkers; false on error
bool treeMain(ParseTreeAndTokens &ptree, int argc, char **argv,
              char const *additionalInfo = NULL);


#endif // PARSSPPT_H
