Add an -e option to ocamlyacc to reject grammars with conflicts.
parent
f54c38ba0c
commit
54065bb1d0
|
@ -210,6 +210,7 @@ extern char tflag;
|
|||
extern char vflag;
|
||||
extern char qflag;
|
||||
extern char sflag;
|
||||
extern char eflag;
|
||||
extern char big_endian;
|
||||
|
||||
extern char *myname;
|
||||
|
@ -335,6 +336,7 @@ extern void output (void);
|
|||
extern void over_unionized (char *u_cptr) Noreturn;
|
||||
extern void prec_redeclared (void);
|
||||
extern void polymorphic_entry_point(char *s) Noreturn;
|
||||
extern void forbidden_conflicts (void);
|
||||
extern void reader (void);
|
||||
extern void reflexive_transitive_closure (unsigned int *R, int n);
|
||||
extern void reprec_warning (char *s);
|
||||
|
|
|
@ -313,3 +313,11 @@ void polymorphic_entry_point(char *s)
|
|||
myname, s);
|
||||
done(1);
|
||||
}
|
||||
|
||||
void forbidden_conflicts(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s: the grammar has conflicts, but -e was specified\n",
|
||||
myname);
|
||||
done(1);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ char rflag;
|
|||
char tflag;
|
||||
char vflag;
|
||||
char qflag;
|
||||
char eflag;
|
||||
char sflag;
|
||||
char big_endian;
|
||||
|
||||
|
@ -160,7 +161,7 @@ void set_signals(void)
|
|||
|
||||
void usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [-v] [-q] [-b file_prefix] filename\n",
|
||||
fprintf(stderr, "usage: %s [-v] [-e] [-q] [-b file_prefix] filename\n",
|
||||
myname);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -213,6 +214,10 @@ void getargs(int argc, char **argv)
|
|||
usage();
|
||||
continue;
|
||||
|
||||
case 'e':
|
||||
eflag = 1;
|
||||
continue;
|
||||
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
|
|
|
@ -47,7 +47,11 @@ void make_parser(void)
|
|||
find_final_state();
|
||||
remove_conflicts();
|
||||
unused_rules();
|
||||
if (SRtotal + RRtotal > 0) total_conflicts();
|
||||
if (SRtotal + RRtotal > 0) {
|
||||
total_conflicts();
|
||||
if (eflag)
|
||||
forbidden_conflicts();
|
||||
}
|
||||
defreds();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue