URI:
       teqn.y - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       teqn.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 %%