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