| %term	CONTIG QTEXT SPACE THIN TAB | 
 | %term	MATRIX LCOL CCOL RCOL COL ABOVE | 
 | %term	MARK LINEUP | 
 | %term	SUM INT PROD UNION INTER | 
 | %term	DEFINE TDEFINE NDEFINE DELIM GSIZE GFONT INCLUDE SPACE IFDEF | 
 | %term	DOTEQ DOTEN | 
 |  | 
 | %right	FROM TO | 
 | %left	OVER SQRT | 
 | %right	SUP SUB | 
 | %right	SIZE FONT ROMAN ITALIC BOLD FAT | 
 | %right	UP DOWN BACK FWD | 
 | %left	LEFT RIGHT | 
 | %right	DOT DOTDOT HAT TILDE BAR LOWBAR HIGHBAR UNDER VEC DYAD UTILDE | 
 |  | 
 | %{ | 
 | #include "e.h" | 
 |  | 
 | int	yylex(void); | 
 | %} | 
 |  | 
 | %% | 
 |  | 
 | stuff	: eqn 		{ putout($1); } | 
 | 	| error		{ ERROR "syntax error" WARNING; }	/* should be SYNTAX */ | 
 | 	|		{ eqnreg = 0; } | 
 | 	; | 
 |  | 
 | eqn	: box | 
 | 	| eqn box	{ eqnbox($1, $2, 0); } | 
 | 	| eqn lineupbox	{ eqnbox($1, $2, 1); } | 
 | 	| LINEUP	{ lineup(0); } | 
 | 	; | 
 |  | 
 | lineupbox: LINEUP box	{ $$ = $2; lineup(1); } | 
 | 	; | 
 |  | 
 | sbox	: SUP box	%prec SUP	{ $$ = $2; } | 
 | 	|		%prec SUP	{ $$ = 0; } | 
 | 	; | 
 |  | 
 | tbox	: TO box	%prec TO	{ $$ = $2; } | 
 | 	|		%prec FROM	{ $$ = 0; } | 
 | 	; | 
 |  | 
 | box	: '{' eqn '}'	{ $$ = $2; } | 
 | 	| QTEXT		{ text(QTEXT, (char *)$1); } | 
 | 	| CONTIG	{ text(CONTIG, (char *)$1); } | 
 | 	| SPACE		{ text(SPACE, (char *) 0); } | 
 | 	| THIN		{ text(THIN, (char *) 0); } | 
 | 	| TAB		{ text(TAB, (char *) 0); } | 
 | 	| SUM		{ funny(SUM); } | 
 | 	| PROD		{ funny(PROD); } | 
 | 	| UNION		{ funny(UNION); } | 
 | 	| INTER		{ funny(INTER); } | 
 |  	| box OVER box			{ boverb($1, $3); } | 
 | 	| MARK box			{ mark($2); } | 
 | 	| size box	%prec SIZE	{ size($1, $2); } | 
 | 	| font box	%prec FONT	{ font($1, $2); } | 
 | 	| FAT box			{ fatbox($2); } | 
 | 	| SQRT box			{ sqrt($2); } | 
 | 	| box SUB {ps -= deltaps;} box sbox	%prec SUB	{ subsup($1, $4, $5); } | 
 | 	| box SUP {ps -= deltaps;} box		%prec SUP	{ subsup($1, 0, $4); } | 
 | 	| int SUB {ps -= deltaps;} box sbox	%prec SUB	{ integral($1, $4, $5); } | 
 | 	| int SUP {ps -= deltaps;} box		%prec SUP	{ integral($1, 0, $4); } | 
 | 	| int					{ integral($1, 0, 0); } | 
 | 	| box FROM {ps -= deltaps;} box tbox	%prec FROM	{ fromto($1, $4, $5); } | 
 | 	| box TO {ps -= deltaps;} box		%prec TO	{ fromto($1, 0, $4); } | 
 | 	| left eqn right			{ paren($1, $2, $3); } | 
 | 	| left eqn 				{ paren($1, $2, 0); } | 
 | 	| box diacrit			{ diacrit($1, $2); } | 
 | 	| fwd box	%prec UP	{ move(FWD, $1, $2); } | 
 | 	| up box	%prec UP	{ move(UP, $1, $2); } | 
 | 	| back box	%prec UP	{ move(BACK, $1, $2); } | 
 | 	| down box	%prec UP	{ move(DOWN, $1, $2); } | 
 | 	| column			{ pile($1); ct = $1; } | 
 | 	| MATRIX {$$=ct;} '{' collist '}'	{ matrix($2); ct = $2; } | 
 | 	; | 
 |  | 
 | int	: INT		{ setintegral(); } | 
 | 	; | 
 |  | 
 | fwd	: FWD text	{ $$ = atoi((char *)$1); } ; | 
 | up	: UP text	{ $$ = atoi((char *) $1); } ; | 
 | back	: BACK text	{ $$ = atoi((char *)$1); } ; | 
 | down	: DOWN text	{ $$ = atoi((char *)$1); } ; | 
 |  | 
 | diacrit	: HAT		{ $$ = HAT; } | 
 | 	| VEC		{ $$ = VEC; } | 
 | 	| DYAD		{ $$ = DYAD; } | 
 | 	| BAR		{ $$ = BAR; } | 
 | 	| LOWBAR	{ $$ = LOWBAR; } | 
 | 	| HIGHBAR	{ $$ = HIGHBAR; } | 
 | 	| UNDER		{ $$ = UNDER; }	/* underbar */ | 
 | 	| DOT		{ $$ = DOT; } | 
 | 	| TILDE		{ $$ = TILDE; } | 
 | 	| UTILDE	{ $$ = UTILDE; } | 
 | 	| DOTDOT	{ $$ = DOTDOT; } /* umlaut = double dot */ | 
 | 	; | 
 |  | 
 | left	: LEFT text	{ $$ = ((char *)$2)[0]; } | 
 | 	| LEFT '{'	{ $$ = '{'; } | 
 | 	; | 
 |  | 
 | right	: RIGHT text	{ $$ = ((char *)$2)[0]; } | 
 | 	| RIGHT '}'	{ $$ = '}'; } | 
 | 	; | 
 |  | 
 | collist	: column | 
 | 	| collist column | 
 | 	; | 
 |  | 
 | column	: col '{' list '}'				{ column($1, DEFGAP); } | 
 | 	| col text {$$=atoi((char*)$2);} '{' list '}'	{ column($1, $3); } | 
 | 	; | 
 |  | 
 | col	: LCOL		{ $$ = startcol(LCOL); } | 
 | 	| CCOL		{ $$ = startcol(CCOL); } | 
 | 	| RCOL		{ $$ = startcol(RCOL); } | 
 | 	| COL		{ $$ = startcol(COL); } | 
 | 	; | 
 |  | 
 | list	: eqn			{ lp[ct++] = $1; } | 
 | 	| list ABOVE eqn	{ lp[ct++] = $3; } | 
 | 	; | 
 |  | 
 | size	: SIZE text	{ $$ = ps; setsize((char *) $2); } | 
 | 	; | 
 |  | 
 | font    : ROMAN         { static char R[]="R"; setfont(R); } | 
 |         | ITALIC        { static char I[]="I"; setfont(I); } | 
 |         | BOLD          { static char B[]="B"; setfont(B); } | 
 |         | FONT text     { setfont((char *)$2); } | 
 |         ; | 
 |  | 
 | text	: CONTIG | 
 | 	| QTEXT | 
 | 	; | 
 |  | 
 | %% |