anyone played with yacc?

Andrew Klossner andrew at orca.UUCP
Fri Jun 8 05:52:24 AEST 1984


	"I have a guy here at Whippany who wants to have a yacc input
	with a large number of tokens in it, but yacc barfs after 127.
	I looked through the source code and found a define for NTERMS
	to be 127.  My question is, This is a pretty suspicious-looking
	number and I am wondering if anyone has experimented with it
	and found out how it interacts with the other defines in that
	section of the file 'dextern' and also if there is any garbage
	in the code that would screw up as a result of increasing
	NTERMS to something like 255. (i.e., is there any funny
	bit-masking, etc. that would blow up)."

We had to do this to implement ANSI Basic, which has *lots* of
productions, terminals, and nonterminals.  I changed the relevant
portion of "dextern" to the following:

# define ACTSIZE 24000 /* was 12000 */
# define MEMSIZE 24000 /* was 12000 */
# define NSTATES 3000 /* was 750 */
# define NTERMS 400 /* was 127 */
# define NPROD 1500 /* was 600 */
# define NNONTERM 600 /* was 300 */
# define TEMPSIZE 3000 /* 1200 */
# define CNAMSZ 10000 /* was 5000 */
# define LSETSIZE 800 /* was 600 */
# define WSETSIZE 800 /* was 350 */

I had no problem as long as I obeyed the following comment, which
occurs later in "dextern":

	/* relationships which must hold:
	TBITSET ints must hold NTERMS+1 bits...
	WSETSIZE >= NNONTERM
	LSETSIZE >= NNONTERM
	TEMPSIZE >= NTERMS + NNONTERMs + 1
	TEMPSIZE >= NSTATES
	*/

Caveat: don't bother trying this if you have 64k processes.  The
resulting a.out file has 400k of BSS space.

  -- Andrew Klossner   (decvax!tektronix!orca!andrew)      [UUCP]
                       (orca!andrew.tektronix at rand-relay)  [ARPA]



More information about the Comp.unix.wizards mailing list