home *** CD-ROM | disk | FTP | other *** search
- \{#
- #
- int fromflg 0;
- \}
- %term CONTIG QTEXT SPACE THIN TAB
- %term UP DOWN BACK FWD
- %term MATRIX LCOL CCOL RCOL COL
- %term MARK LINEUP
- %term SUM INT PROD UNION INTER
- %term LPILE PILE CPILE RPILE ABOVE
- %term DEFINE DELIM GSIZE GFONT
- %right FROM TO
- %left OVER SQRT
- %right SUPER SUB
- %right SIZE FONT ROMAN ITALIC BOLD
- %left MQ MQ1
- %left LEFT RIGHT
- %right DOT DOTDOT HAT TILDE BAR UNDER
-
- %%
-
- stuff : eqn ={ putout($1); }
- | error ={ error(!FATAL, "syntax error in equation %d", first); }
- | ={ eqnreg = 0; }
- ;
-
- eqn : box ={ if(dbg)printf(".\teqn: S%d\n",$1); }
- | eqn box ={ eqnbox($1,$2); }
- | eqn MARK ={ mark($1); }
- | MARK ={ mark(0); }
- | eqn LINEUP ={ lineup($1); }
- | LINEUP ={ lineup(0); }
- ;
-
- matrix : MATRIX ={ $$ = ct; } ;
-
- collist : column
- | collist column
- ;
-
- column : lcol MQ list MQ1 ={ column('L',$1,$3); }
- | ccol MQ list MQ1 ={ column('C',$1,$3); }
- | rcol MQ list MQ1 ={ column('R',$1,$3); }
- | col MQ list MQ1 ={ column('-',$1,$3); }
- ;
-
- lcol : LCOL ={ $$ = ct++; } ;
- ccol : CCOL ={ $$ = ct++; } ;
- rcol : RCOL ={ $$ = ct++; } ;
- col : COL ={ $$ = ct++; } ;
-
- sbox : super box %prec SUPER
- ={ $$ = $2; }
- | %prec SUB
- ={ $$ = 0; }
- ;
-
- box : box OVER box ={ boverb($1,$3); }
- | size box %prec SIZE
- ={ size($1,$2); }
- | font box %prec FONT
- ={ font($1,$2); }
- | SQRT box ={ sqrt($2); }
- | lpile MQ list MQ1 %prec LPILE
- ={ lpile('L', $1, ct); ct=$1; }
- | cpile MQ list MQ1 %prec CPILE
- ={ lpile('C', $1, ct); ct=$1; }
- | rpile MQ list MQ1 %prec RPILE
- ={ lpile('R', $1, ct); ct=$1; }
- | pile MQ list MQ1 %prec PILE
- ={ lpile('-', $1, ct); ct=$1; }
- | box sub box sbox %prec SUB
- ={ if(dbg)printf(".\t sub box %d %d %d\n",$1,$3,$4);
- if($4 == 0)bshiftb($1,$2,$3);
- else shift2($1,$3,$4);
- }
- | box super box %prec SUPER
- ={ bshiftb($1,$2,$3); }
- | left eqn right %prec LEFT
- ={ paren($1,$2,$3); }
- | pbox
- | box from box to box %prec TO
- ={ fromto($1,$3,$5); fromflg=0; }
- | box from box %prec FROM
- ={ fromto($1,$3,0); fromflg=0; }
- | box to box %prec TO
- ={ fromto($1,0,$3); }
- | box diacrit ={ diacrit($1,$2); }
- | fwd box ={ move(0,$1,$2); }
- | up box ={ move(1,$1,$2); }
- | back box ={ move(2,$1,$2); }
- | down box ={ move(3,$1,$2); }
- | matrix MQ collist MQ1 ={ matrix($1,$3); }
- ;
-
- fwd : FWD text ={ $$ = numb($1); } ;
- up : UP text ={ $$ = numb($1); } ;
- back : BACK text ={ $$ = numb($1); } ;
- down : DOWN text ={ $$ = numb($1); } ;
-
- diacrit : HAT ={ $$ = 'H'; }
- | BAR ={ $$ = 'B'; }
- | UNDER ={ $$ = 'N'; } /* under bar */
- | DOT ={ $$ = 'D'; }
- | TILDE ={ $$ = 'T'; }
- | DOTDOT ={ $$ = 'U'; } /* umlaut = double dot */
- ;
-
- from : FROM
- ;
- to : TO
- ;
-
- left : LEFT text ={ $$ = $2->c1; }
- | LEFT MQ ={ $$ = '{'; }
- ;
-
- right : RIGHT text ={ $$ = $2->c1; }
- | RIGHT MQ1 ={ $$ = '}'; }
- | ={ $$ = 0; }
- ;
-
- list : eqn ={ lp[ct++] = $1; }
- | list ABOVE eqn ={ lp[ct++] = $3; }
- ;
-
- lpile : LPILE ={ $$=ct; } ;
- cpile : CPILE ={ $$=ct; } ;
- pile : PILE ={ $$=ct; } ;
- rpile : RPILE ={ $$=ct; } ;
-
- size : SIZE text
- ;
-
- font : ROMAN
- | ITALIC
- | BOLD
- | FONT text
- ;
-
- sub : SUB ={ shift(1); } ;
-
- super : SUPER ={ shift(-1); } ;
-
- pbox : MQ eqn MQ1 ={ $$ = $2; }
- | QTEXT ={ text('q',$1); }
- | CONTIG ={ text('c',$1); }
- | SPACE ={ text('~', $1); }
- | THIN ={ text('^', $1); }
- | TAB ={ text('\t', $1); }
- | SUM ={ text('c', "SIGMA"); }
- | PROD ={ text('c', "PI"); }
- | INT ={ text('c', "^"); }
- | UNION ={ text('c' ,"U"); }
- | INTER ={ text('c', "A"); }
- ;
-
- text : CONTIG
- | QTEXT
- | SPACE ={ $$ = & "\\|\\|"; }
- | THIN ={ $$ = & "\\|"; }
- ;
-
- %%
-