The DejaVU Framework -- hush 3.0
[.] Papers Tutorials Examples Manuals Interfaces Sources Packages Resources ?

include: parser.h hush-3.1/grammar/grammar


[.] - [up] [top] - index make include slides talks
  ifndef GRAMMAR_PARSER_H
  define GRAMMAR_PARSER_H
  
  include <hush/ml/parser.h>
  //#include <hush/ml/scanner.h>
  
  include <hush/term.h>
  include <hush/iter.h>
  
  //AE #include <grammar/token.h>
  //#include <grammar/scanner.h>
  
  extern "C" {  extern void free(void*); }
  
  ifndef yylex_defined
  define yylex_defined
  extern "C" {
  static int yylex() { return 0; }
  }
  endif
  
  typedef struct { char *t_name; int t_val; } yytoktype;
  
  ifndef YYSTYPE
  define YYSTYPE term*
  endif
  
  typedef int yytabelem;
  ifndef YYMAXDEPTH
  define YYMAXDEPTH 150
  endif
                          
  

yacc_parser


  class yacc_parser : public parser {
  protected:
  
  yacc_parser() { }
  
  public:
  
  yacc_parser(iter<term>* l) : parser(this) {
  yyiter = l;
  yychar = -1;
  if YYMAXDEPTH > 0
  yys =  yy_yys;
  yyv =  yy_yyv;
  endif
  yystate = 0;
  }
  
  /*
  yacc_parser(scanner* l) : parser(this) {
  _scanner = l;
  yyiter = l;
  yychar = -1;
  if YYMAXDEPTH > 0
  yys =  yy_yys;
  yyv =  yy_yyv;
  endif
  } */
  
  //AE: iter<term>* yyiter;
  
  if YYMAXDEPTH > 0
  int yy_yys[YYMAXDEPTH];
  YYSTYPE yy_yyv[YYMAXDEPTH];
  endif
  
  int *yys;
  YYSTYPE *yyv;
  
  ifdef YYNMBCHARS
  int yycvtok(int i);
  endif
  
  YYSTYPE *yypv;                   /* top of value stack */
  int *yyps;                       /* top of state stack */
  
  int yystate;                     /* current state */
  int yytmp;                       /* extra var (lasts between blocks) */
  
  int yynerrs;                    /* number of errors */
  
  int yyerrflag;                  /* error recovery flag */
  int yychar;                     /* current input token number */
  
  // added for enabling garbage collection when sending a result
  void release()  { free(yys); free(yyv); } 
  // May be defined with -e option of ooyacc -- see documentation 
  virtual void yyerror(char* s); 
  virtual char* error() { return "syntax error"; }
  public:
  //AE: YYSTYPE yylval;
  //AE: YYSTYPE yyval;
  
  virtual int obsolete_yylex() {
          term* x = (*yyiter)();
          yylval = (term*) x;
          return (int) yylval->n;;
          }
  
  virtual term* operator()() {
          cerr << "ERROR: parser::()" << endl;
          return 0;
          }
  int yydebug;
  };

slide: yacc_parser

  
  inline void yacc_parser::yyerror(char* s) {
          _error = error();
          yylval = mkterm("#error:",mkterm(_error));
          cerr << _error << endl;
          //cerr << s << ": ";
          //error();
          }
  endif
  

[.] Papers Tutorials Examples Manuals Interfaces Sources Packages Resources ?
Hush Online Technology
hush@cs.vu.nl
11/03/98