13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*
23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * errsupport.c -- error support code for SORCERER output
33eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang *
43eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * Define your own or compile and link this in.
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang *
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * Terence Parr
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * U of MN, AHPCRC
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * February 1994
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang */
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "sorcerer.h"
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangvoid
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef __USE_PROTOS
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangmismatched_range( STreeParser *_parser, int looking_for, int upper_token, SORAST *found )
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangmismatched_range( _parser, looking_for, upper_token, found )
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangint looking_for;
183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangint upper_token;
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSORAST *found;
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSTreeParser *_parser;
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  if ( found!=NULL ) {
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    fprintf(stderr,
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        "parse error: expected token range %d..%d found token %d\n",
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        looking_for, upper_token,
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        found->token);
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  else {
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    fprintf(stderr,
313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        "parse error: expected token range %d..%d found NULL tree\n",
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        looking_for, upper_token);
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangvoid
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef __USE_PROTOS
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangmissing_wildcard(STreeParser *_parser)
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangmissing_wildcard(_parser)
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSTreeParser *_parser;
423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  fprintf(stderr, "parse error: expected any token/tree found found NULL tree\n");
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangvoid
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef __USE_PROTOS
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangmismatched_token( STreeParser *_parser, int looking_for, SORAST *found )
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangmismatched_token( _parser, looking_for, found )
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangint looking_for;
533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSORAST *found;
543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSTreeParser *_parser;
553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  if ( found!=NULL ) {
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    fprintf(stderr,
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        "parse error: expected token %d found token %d\n",
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        looking_for,
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        found->token);
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  else {
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    fprintf(stderr,
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        "parse error: expected token %d found NULL tree\n",
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        looking_for);
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangvoid
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef __USE_PROTOS
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangno_viable_alt( STreeParser *_parser, char *rulename, SORAST *root )
733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangno_viable_alt( _parser, rulename, root )
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangchar *rulename;
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSORAST *root;
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangSTreeParser *_parser;
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  if ( root==NULL )
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    fprintf(stderr,
823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        "parse error: in rule %s, no viable alternative for NULL tree\n",
833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        rulename);
843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  else
853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    fprintf(stderr,
863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        "parse error: in rule %s, no viable alternative for tree\n",
873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        rulename);
883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangvoid
913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifdef __USE_PROTOS
923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangsorcerer_panic(char *err)
933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#else
943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangsorcerer_panic(err)
953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangchar *err;
963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  fprintf(stderr, "panic: %s\n", err);
993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  exit(-1);
1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang}
101