.SH NAME
LLgen, an extended LL(1) parser generator
.SH SYNOPSIS
-LLgen [ \-vxwa ] [ \-j[\fInum\fP] ] [ \-l\fInum\fP ] [ \-h\fInum\fP ] file ...
+LLgen [ \-vxwans ] [ \-j[\fInum\fP] ] [ \-l\fInum\fP ] [ \-h\fInum\fP ] file ...
.SH DESCRIPTION
\fILLgen\fP
converts a context-free grammar into a set of
using the token-names.
\fILpars.c\fP
contains the error recovery routines and tables. It must also
-be compiled by the C-compiler.
+be compiled by the C-compiler. When the generated parser uses non-correcting
+error recovery (
+\fB\-n\fP
+option)
+\fILLgen\fP
+also generates a file
+\fILncor.c\fP
+that contains the non-correcting recovery mechanism.
.PP
\fILLgen\fP
will only update those output files that differ from their previous
no warnings are given.
.IP \fB\-a\fP
Produce ANSI C function headers and prototypes.
+.IP \fB\-n\fP
+Produce a parser with non-correcting error recovery.
+.IP \fB\-s\fP
+Simulate the calling of all defined subparsers in all semantic actions. When
+using non-correcting error recovery, subparsers that are called in semantic
+actions may cause problems; this flag provides a `brute-force' solution.
.IP \fB\-j\fP[\fInum\fP]
when this flag is given, \fILLgen\fP will generate dense switches,
so that the compiler can generate a jump table for it. This will only be
.br
\fILLgen, an Extended LL(1) Parser Generator\fP
by C.J.H. Jacobs.
+.br
+\fITop-down Non-Correcting Error Recovery in LLgen\fP
+by A.W van Deudekom and P.J. Kooiman
.SH DIAGNOSTICS
Are intended to be self-explanatory. They are reported
on standard error. A more detailed report is found in the
file.
.SH AUTHOR
Ceriel J. H. Jacobs
+.br
+The non-correcting error recovery mechanism is written by
+A.W van Deudekom and P.J. Kooiman.
cp src/LLgen $(INSTALLDIR)/LLgen
cp lib/rec $(LIBDIR)/rec
cp lib/incl $(LIBDIR)/incl
+ cp lib/nc_rec $(LIBDIR)/nc_rec
+ cp lib/nc_incl $(LIBDIR)/nc_incl
cp LLgen.1 $(MANDIR)/LLgen.1
firstinstall:
-mkdir $(LIBDIR)
cp lib/rec $(LIBDIR)/rec
cp lib/incl $(LIBDIR)/incl
+ cp lib/nc_rec $(LIBDIR)/nc_rec
+ cp lib/nc_incl $(LIBDIR)/nc_incl
cp LLgen.1 $(MANDIR)/LLgen.1
cmp:
-cmp src/LLgen $(INSTALLDIR)/LLgen
-cmp lib/rec $(LIBDIR)/rec
-cmp lib/incl $(LIBDIR)/incl
+ -cmp lib/nc_rec $(LIBDIR)/nc_rec
+ -cmp lib/nc_incl $(LIBDIR)/nc_incl
-cmp LLgen.1 $(MANDIR)/LLgen.1
distr:
if [ $(DO_MACHINE_INDEP) = y ] ; \
then cp $(SRC_HOME)/util/LLgen/lib/rec $(LIBDIR)/rec ; \
cp $(SRC_HOME)/util/LLgen/lib/incl $(LIBDIR)/incl ; \
+ cp $(SRC_HOME)/util/LLgen/lib/nc_incl $(LIBDIR)/nc_incl ; \
+ cp $(SRC_HOME)/util/LLgen/lib/nc_rec $(LIBDIR)/nc_rec ; \
mk_manpage $(SRC_HOME)/util/LLgen/LLgen.1 $(TARGET_HOME) ; \
fi
then if [ -d $(LIBDIR) ] ; then : ; else mkdir $(LIBDIR) ; fi ; \
cp $(SRC_HOME)/util/LLgen/lib/rec $(LIBDIR)/rec ; \
cp $(SRC_HOME)/util/LLgen/lib/incl $(LIBDIR)/incl ; \
+ cp $(SRC_HOME)/util/LLgen/lib/nc_incl $(LIBDIR)/nc_incl ; \
+ cp $(SRC_HOME)/util/LLgen/lib/nc_rec $(LIBDIR)/nc_rec ; \
mk_manpage $(SRC_HOME)/util/LLgen/LLgen.1 $(TARGET_HOME) ; \
fi
-cmp src/LLgen $(INSTALLDIR)/LLgen
-cmp $(SRC_HOME)/util/LLgen/lib/rec $(LIBDIR)/rec
-cmp $(SRC_HOME)/util/LLgen/lib/incl $(LIBDIR)/incl
+ -cmp $(SRC_HOME)/util/LLgen/lib/nc_rec $(LIBDIR)/nc_rec
+ -cmp $(SRC_HOME)/util/LLgen/lib/nc_incl $(LIBDIR)/nc_incl
distr:
cd src; make distr
tokens.$(SUF): $(SRC_DIR)/extern.h
tokens.$(SUF): $(SRC_DIR)/io.h
tokens.$(SUF): $(SRC_DIR)/types.h
+
+savegram.$(SUF): $(SRC_DIR)/savegram.c
+ $(CC) -c $(CFLAGS) $(SRC_DIR)/savegram.c
+savegram.$(SUF): $(SRC_DIR)/types.h
+savegram.$(SUF): $(SRC_DIR)/extern.h
+savegram.$(SUF): $(SRC_DIR)/io.h
+savegram.$(SUF): $(SRC_DIR)/sets.h