eqn.y (3636B)
1 %term CONTIG QTEXT SPACE THIN TAB 2 %term MATRIX LCOL CCOL RCOL COL ABOVE 3 %term MARK LINEUP 4 %term SUM INT PROD UNION INTER 5 %term DEFINE TDEFINE NDEFINE DELIM GSIZE GFONT INCLUDE SPACE IFDEF 6 %term DOTEQ DOTEN 7 8 %right FROM TO 9 %left OVER SQRT 10 %right SUP SUB 11 %right SIZE FONT ROMAN ITALIC BOLD FAT 12 %right UP DOWN BACK FWD 13 %left LEFT RIGHT 14 %right DOT DOTDOT HAT TILDE BAR LOWBAR HIGHBAR UNDER VEC DYAD UTILDE 15 16 %{ 17 #include "e.h" 18 19 int yylex(void); 20 %} 21 22 %% 23 24 stuff : eqn { putout($1); } 25 | error { ERROR "syntax error" WARNING; } /* should be SYNTAX */ 26 | { eqnreg = 0; } 27 ; 28 29 eqn : box 30 | eqn box { eqnbox($1, $2, 0); } 31 | eqn lineupbox { eqnbox($1, $2, 1); } 32 | LINEUP { lineup(0); } 33 ; 34 35 lineupbox: LINEUP box { $$ = $2; lineup(1); } 36 ; 37 38 sbox : SUP box %prec SUP { $$ = $2; } 39 | %prec SUP { $$ = 0; } 40 ; 41 42 tbox : TO box %prec TO { $$ = $2; } 43 | %prec FROM { $$ = 0; } 44 ; 45 46 box : '{' eqn '}' { $$ = $2; } 47 | QTEXT { text(QTEXT, (char *)$1); } 48 | CONTIG { text(CONTIG, (char *)$1); } 49 | SPACE { text(SPACE, (char *) 0); } 50 | THIN { text(THIN, (char *) 0); } 51 | TAB { text(TAB, (char *) 0); } 52 | SUM { funny(SUM); } 53 | PROD { funny(PROD); } 54 | UNION { funny(UNION); } 55 | INTER { funny(INTER); } 56 | box OVER box { boverb($1, $3); } 57 | MARK box { mark($2); } 58 | size box %prec SIZE { size($1, $2); } 59 | font box %prec FONT { font($1, $2); } 60 | FAT box { fatbox($2); } 61 | SQRT box { sqrt($2); } 62 | box SUB {ps -= deltaps;} box sbox %prec SUB { subsup($1, $4, $5); } 63 | box SUP {ps -= deltaps;} box %prec SUP { subsup($1, 0, $4); } 64 | int SUB {ps -= deltaps;} box sbox %prec SUB { integral($1, $4, $5); } 65 | int SUP {ps -= deltaps;} box %prec SUP { integral($1, 0, $4); } 66 | int { integral($1, 0, 0); } 67 | box FROM {ps -= deltaps;} box tbox %prec FROM { fromto($1, $4, $5); } 68 | box TO {ps -= deltaps;} box %prec TO { fromto($1, 0, $4); } 69 | left eqn right { paren($1, $2, $3); } 70 | left eqn { paren($1, $2, 0); } 71 | box diacrit { diacrit($1, $2); } 72 | fwd box %prec UP { move(FWD, $1, $2); } 73 | up box %prec UP { move(UP, $1, $2); } 74 | back box %prec UP { move(BACK, $1, $2); } 75 | down box %prec UP { move(DOWN, $1, $2); } 76 | column { pile($1); ct = $1; } 77 | MATRIX {$$=ct;} '{' collist '}' { matrix($2); ct = $2; } 78 ; 79 80 int : INT { setintegral(); } 81 ; 82 83 fwd : FWD text { $$ = atoi((char *)$1); } ; 84 up : UP text { $$ = atoi((char *) $1); } ; 85 back : BACK text { $$ = atoi((char *)$1); } ; 86 down : DOWN text { $$ = atoi((char *)$1); } ; 87 88 diacrit : HAT { $$ = HAT; } 89 | VEC { $$ = VEC; } 90 | DYAD { $$ = DYAD; } 91 | BAR { $$ = BAR; } 92 | LOWBAR { $$ = LOWBAR; } 93 | HIGHBAR { $$ = HIGHBAR; } 94 | UNDER { $$ = UNDER; } /* underbar */ 95 | DOT { $$ = DOT; } 96 | TILDE { $$ = TILDE; } 97 | UTILDE { $$ = UTILDE; } 98 | DOTDOT { $$ = DOTDOT; } /* umlaut = double dot */ 99 ; 100 101 left : LEFT text { $$ = ((char *)$2)[0]; } 102 | LEFT '{' { $$ = '{'; } 103 ; 104 105 right : RIGHT text { $$ = ((char *)$2)[0]; } 106 | RIGHT '}' { $$ = '}'; } 107 ; 108 109 collist : column 110 | collist column 111 ; 112 113 column : col '{' list '}' { column($1, DEFGAP); } 114 | col text {$$=atoi((char*)$2);} '{' list '}' { column($1, $3); } 115 ; 116 117 col : LCOL { $$ = startcol(LCOL); } 118 | CCOL { $$ = startcol(CCOL); } 119 | RCOL { $$ = startcol(RCOL); } 120 | COL { $$ = startcol(COL); } 121 ; 122 123 list : eqn { lp[ct++] = $1; } 124 | list ABOVE eqn { lp[ct++] = $3; } 125 ; 126 127 size : SIZE text { $$ = ps; setsize((char *) $2); } 128 ; 129 130 font : ROMAN { static char R[]="R"; setfont(R); } 131 | ITALIC { static char I[]="I"; setfont(I); } 132 | BOLD { static char B[]="B"; setfont(B); } 133 | FONT text { setfont((char *)$2); } 134 ; 135 136 text : CONTIG 137 | QTEXT 138 ; 139 140 %%