10b2a88b4Sshannon %{# 2ee3cb8f7Sbostic /*- 3ee3cb8f7Sbostic * Copyright (c) 1991 The Regents of the University of California. 4ee3cb8f7Sbostic * All rights reserved. 5ee3cb8f7Sbostic * 6ee3cb8f7Sbostic * %sccs.include.proprietary.c% 7ee3cb8f7Sbostic */ 8ee3cb8f7Sbostic 9ee3cb8f7Sbostic #ifndef lint 10*7ead102eStorek static char sccsid[] = "@(#)e.y 4.3 (Berkeley) 03/01/93"; 11ee3cb8f7Sbostic #endif /* not lint */ 12ee3cb8f7Sbostic 130b2a88b4Sshannon #include "e.h" 140b2a88b4Sshannon int fromflg; 150b2a88b4Sshannon %} 160b2a88b4Sshannon %term CONTIG QTEXT SPACE THIN TAB 170b2a88b4Sshannon %term MATRIX LCOL CCOL RCOL COL 180b2a88b4Sshannon %term MARK LINEUP 190b2a88b4Sshannon %term SUM INT PROD UNION INTER 200b2a88b4Sshannon %term LPILE PILE CPILE RPILE ABOVE 210b2a88b4Sshannon %term DEFINE TDEFINE NDEFINE DELIM GSIZE GFONT INCLUDE 220b2a88b4Sshannon %right FROM TO 230b2a88b4Sshannon %left OVER SQRT 240b2a88b4Sshannon %right SUP SUB 250b2a88b4Sshannon %right SIZE FONT ROMAN ITALIC BOLD FAT 260b2a88b4Sshannon %right UP DOWN BACK FWD 270b2a88b4Sshannon %left LEFT RIGHT 280b2a88b4Sshannon %right DOT DOTDOT HAT TILDE BAR UNDER VEC DYAD 290b2a88b4Sshannon 300b2a88b4Sshannon %% 310b2a88b4Sshannon 320b2a88b4Sshannon stuff : eqn { putout($1); } 330b2a88b4Sshannon | error { error(!FATAL, "syntax error"); } 340b2a88b4Sshannon | { eqnreg = 0; } 350b2a88b4Sshannon ; 360b2a88b4Sshannon 370b2a88b4Sshannon eqn : box 380b2a88b4Sshannon | eqn box { eqnbox($1, $2, 0); } 390b2a88b4Sshannon | eqn lineupbox { eqnbox($1, $2, 1); } 400b2a88b4Sshannon | LINEUP { lineup(0); } 410b2a88b4Sshannon ; 420b2a88b4Sshannon 430b2a88b4Sshannon lineupbox: LINEUP box { $$ = $2; lineup(1); } 440b2a88b4Sshannon ; 450b2a88b4Sshannon 460b2a88b4Sshannon matrix : MATRIX { $$ = ct; } ; 470b2a88b4Sshannon 480b2a88b4Sshannon collist : column 490b2a88b4Sshannon | collist column 500b2a88b4Sshannon ; 510b2a88b4Sshannon 520b2a88b4Sshannon column : lcol '{' list '}' { column('L', $1); } 530b2a88b4Sshannon | ccol '{' list '}' { column('C', $1); } 540b2a88b4Sshannon | rcol '{' list '}' { column('R', $1); } 550b2a88b4Sshannon | col '{' list '}' { column('-', $1); } 560b2a88b4Sshannon ; 570b2a88b4Sshannon 580b2a88b4Sshannon lcol : LCOL { $$ = ct++; } ; 590b2a88b4Sshannon ccol : CCOL { $$ = ct++; } ; 600b2a88b4Sshannon rcol : RCOL { $$ = ct++; } ; 610b2a88b4Sshannon col : COL { $$ = ct++; } ; 620b2a88b4Sshannon 630b2a88b4Sshannon sbox : sup box %prec SUP { $$ = $2; } 640b2a88b4Sshannon ; 650b2a88b4Sshannon 660b2a88b4Sshannon tbox : to box %prec TO { $$ = $2; } 670b2a88b4Sshannon | %prec FROM { $$ = 0; } 680b2a88b4Sshannon ; 690b2a88b4Sshannon 700b2a88b4Sshannon box : box OVER box { boverb($1, $3); } 710b2a88b4Sshannon | MARK box { mark($2); } 720b2a88b4Sshannon | size box %prec SIZE { size($1, $2); } 730b2a88b4Sshannon | font box %prec FONT { font($1, $2); } 740b2a88b4Sshannon | FAT box { fatbox($2); } 75*7ead102eStorek | SQRT box { eqsqrt($2); } 760b2a88b4Sshannon | lpile '{' list '}' { lpile('L', $1, ct); ct = $1; } 770b2a88b4Sshannon | cpile '{' list '}' { lpile('C', $1, ct); ct = $1; } 780b2a88b4Sshannon | rpile '{' list '}' { lpile('R', $1, ct); ct = $1; } 790b2a88b4Sshannon | pile '{' list '}' { lpile('-', $1, ct); ct = $1; } 800b2a88b4Sshannon | box sub box sbox %prec SUB { shift2($1, $3, $4); } 810b2a88b4Sshannon | box sub box %prec SUB { bshiftb($1, $2, $3); } 820b2a88b4Sshannon | box sup box %prec SUP { bshiftb($1, $2, $3); } 830b2a88b4Sshannon | int sub box sbox %prec SUB { integral($1, $3, $4); } 840b2a88b4Sshannon | int sub box %prec SUB { integral($1, $3, 0); } 850b2a88b4Sshannon | int sup box %prec SUP { integral($1, 0, $3); } 860b2a88b4Sshannon | int { integral($1, 0, 0); } 870b2a88b4Sshannon | left eqn right { paren($1, $2, $3); } 880b2a88b4Sshannon | pbox 890b2a88b4Sshannon | box from box tbox %prec FROM { fromto($1, $3, $4); fromflg=0; } 900b2a88b4Sshannon | box to box %prec TO { fromto($1, 0, $3); } 910b2a88b4Sshannon | box diacrit { diacrit($1, $2); } 920b2a88b4Sshannon | fwd box %prec UP { move(FWD, $1, $2); } 930b2a88b4Sshannon | up box %prec UP { move(UP, $1, $2); } 940b2a88b4Sshannon | back box %prec UP { move(BACK, $1, $2); } 950b2a88b4Sshannon | down box %prec UP { move(DOWN, $1, $2); } 960b2a88b4Sshannon | matrix '{' collist '}' { matrix($1); } 970b2a88b4Sshannon ; 980b2a88b4Sshannon 990b2a88b4Sshannon int : INT { setintegral(); } 1000b2a88b4Sshannon ; 1010b2a88b4Sshannon 1020b2a88b4Sshannon fwd : FWD text { $$ = atoi((char *) $1); } ; 1030b2a88b4Sshannon up : UP text { $$ = atoi((char *) $1); } ; 1040b2a88b4Sshannon back : BACK text { $$ = atoi((char *) $1); } ; 1050b2a88b4Sshannon down : DOWN text { $$ = atoi((char *) $1); } ; 1060b2a88b4Sshannon 1070b2a88b4Sshannon diacrit : HAT { $$ = HAT; } 1080b2a88b4Sshannon | VEC { $$ = VEC; } 1090b2a88b4Sshannon | DYAD { $$ = DYAD; } 1100b2a88b4Sshannon | BAR { $$ = BAR; } 1110b2a88b4Sshannon | UNDER { $$ = UNDER; } /* under bar */ 1120b2a88b4Sshannon | DOT { $$ = DOT; } 1130b2a88b4Sshannon | TILDE { $$ = TILDE; } 1140b2a88b4Sshannon | DOTDOT { $$ = DOTDOT; } /* umlaut = double dot */ 1150b2a88b4Sshannon ; 1160b2a88b4Sshannon 1170b2a88b4Sshannon from : FROM { $$=ps; ps -= 3; fromflg = 1; 1180b2a88b4Sshannon if(dbg)printf(".\tfrom: old ps %d, new ps %d, fflg %d\n", $$, ps, fromflg); 1190b2a88b4Sshannon } 1200b2a88b4Sshannon ; 1210b2a88b4Sshannon 1220b2a88b4Sshannon to : TO { $$=ps; if(fromflg==0)ps -= 3; 1230b2a88b4Sshannon if(dbg)printf(".\tto: old ps %d, new ps %d\n", $$, ps); 1240b2a88b4Sshannon } 1250b2a88b4Sshannon ; 1260b2a88b4Sshannon 1270b2a88b4Sshannon left : LEFT text { $$ = ((char *)$2)[0]; } 1280b2a88b4Sshannon | LEFT '{' { $$ = '{'; } 1290b2a88b4Sshannon ; 1300b2a88b4Sshannon 1310b2a88b4Sshannon right : RIGHT text { $$ = ((char *)$2)[0]; } 1320b2a88b4Sshannon | RIGHT '}' { $$ = '}'; } 1330b2a88b4Sshannon | { $$ = 0; } 1340b2a88b4Sshannon ; 1350b2a88b4Sshannon 1360b2a88b4Sshannon list : eqn { lp[ct++] = $1; } 1370b2a88b4Sshannon | list ABOVE eqn { lp[ct++] = $3; } 1380b2a88b4Sshannon ; 1390b2a88b4Sshannon 1400b2a88b4Sshannon lpile : LPILE { $$ = ct; } ; 1410b2a88b4Sshannon cpile : CPILE { $$ = ct; } ; 1420b2a88b4Sshannon pile : PILE { $$ = ct; } ; 1430b2a88b4Sshannon rpile : RPILE { $$ = ct; } ; 1440b2a88b4Sshannon 1450b2a88b4Sshannon size : SIZE text { $$ = ps; setsize((char *) $2); } 1460b2a88b4Sshannon ; 1470b2a88b4Sshannon 1480b2a88b4Sshannon font : ROMAN { setfont(ROM); } 1490b2a88b4Sshannon | ITALIC { setfont(ITAL); } 1500b2a88b4Sshannon | BOLD { setfont(BLD); } 1510b2a88b4Sshannon | FONT text { setfont(((char *)$2)[0]); } 1520b2a88b4Sshannon ; 1530b2a88b4Sshannon 1540b2a88b4Sshannon sub : SUB { shift(SUB); } 1550b2a88b4Sshannon ; 1560b2a88b4Sshannon 1570b2a88b4Sshannon sup : SUP { shift(SUP); } 1580b2a88b4Sshannon ; 1590b2a88b4Sshannon 1600b2a88b4Sshannon pbox : '{' eqn '}' { $$ = $2; } 1610b2a88b4Sshannon | QTEXT { text(QTEXT, (char *) $1); } 1620b2a88b4Sshannon | CONTIG { text(CONTIG, (char *) $1); } 1630b2a88b4Sshannon | SPACE { text(SPACE, 0); } 1640b2a88b4Sshannon | THIN { text(THIN, 0); } 1650b2a88b4Sshannon | TAB { text(TAB, 0); } 1660b2a88b4Sshannon | SUM { funny(SUM); } 1670b2a88b4Sshannon | PROD { funny(PROD); } 1680b2a88b4Sshannon | UNION { funny(UNION); } 1690b2a88b4Sshannon | INTER { funny(INTER); } /* intersection */ 1700b2a88b4Sshannon ; 1710b2a88b4Sshannon 1720b2a88b4Sshannon text : CONTIG 1730b2a88b4Sshannon | QTEXT 1740b2a88b4Sshannon ; 1750b2a88b4Sshannon 1760b2a88b4Sshannon %% 177