parse.fp is an LALR parser engine.
school (as in grammar school) is a parser generator for fp.
files:	school.fp		top-level module
	fplstd.fp, gscan.fp	lexer files
	parseg.fp		hand-coded parser for grammar
	lritems.fp		transform grammar to sets of LR(1) items
	lalrgen.fp		generate the grammar tables
	mkfp.fp			pretty-print output
	lalr			documentation of LALR algorithm
*.grm:	grammar files, for testing
*.tst:	inputs to the parsers generated from the .grm files
.gen:	extension for generated parsers
.run:	extension for generated, compiled parsers
.res:	extension for log files of result of running parser

e.g., 'make block.gen' will make the parser for the grammar 'block.grm';
it can be run by calling 'make block.res', which will produce (and
then possibly delete) 'block.run'.

to be done:
 - add *specifications and +specifications so you can do lists
   effectively (means you have to reduce things of variable length)
 - allow specification of tokens to ignore (space, comment)
 - allow specification of error rules
 - change parse so it can be executed in parallel
 - speed up parser generation
	time (684.57 on capella for fplpar.fp, fpc, gcc -pg) now spent in:
	81% in lriclose (16690), 1/2 lrfirst, 1/5 uniqsort, 1/6 getprods
	26% in uniqsort (30589+87200), lriclose 21696, lrgoto 6008
	43% in lrfirst+lrfthis (18381+54860), lrfirst 58893, lrfthis 14348
	24% in getprods (25196), 1/3 self, 2/5 eq
	19% in lalrsingle (1080), most from lrgoto
	compare 18% (most from member), isterminal 17%, returnvect 17%
 - improve the speed of the parser, which spends a long time in tableget
