Annotation of researchv9/jtools/src/Jpic/picy.y, revision 1.1.1.1

1.1       root        1: %token BOX     1
                      2: %token ARROW   2
                      3: %token CIRCLE  3
                      4: %token ARC     4
                      5: %token ELLIPSE 5
                      6: %token LINE    6
                      7: %token MOVE    7
                      8: %token TEXT    8
                      9: %token TROFF   9
                     10: %token SPLINE  10
                     11: %token BLOCK   11
                     12: %token BLOCKEND 12
                     13: %token PRINT
                     14: %token PLACE
                     15: %token ATTR
                     16: %token SPREAD FILL LJUST RJUST ABOVE BELOW
                     17: %token LEFT RIGHT UP DOWN FROM TO AT BY WITH HEAD CW CCW THEN
                     18: %token HEIGHT WIDTH RADIUS DIAMETER LENGTH SIZE
                     19: %token PLACENAME VARNAME DEFNAME CORNER HERE LAST NTH SAME BETWEEN AND
                     20: %token EAST WEST NORTH SOUTH NE NW SE SW CENTER START END
                     21: %token DOTX DOTY DOTHT DOTWID DOTRAD
                     22: %token NUMBER
                     23: %token DIR
                     24: %token DOT DASH CHOP
                     25: %token ST      /* statement terminator */
                     26: 
                     27: %left  '+' '-'
                     28: %left  '*' '/' '%'
                     29: %right UMINUS
                     30: 
                     31: %{
                     32: #include       <stdio.h>
                     33: extern int     hvmode, codegen;
                     34: extern float   between, lastfloat;
                     35: %}
                     36: 
                     37: %%
                     38: 
                     39: top:
                     40:          piclist
                     41:        | /* empty */
                     42:        | error         { yyerror("syntax error"); }
                     43:        ;
                     44: 
                     45: piclist:
                     46:          picture
                     47:        | piclist picture
                     48:        ;
                     49: 
                     50: picture:
                     51:          prim ST                       { codegen = 1; }
                     52:        | leftbrace piclist '}'         { rightthing($1, '}'); $$ = $2; }
                     53:        | PLACENAME ':' picture         { makevar($1, PLACENAME, $3); $$ = $3; }
                     54:        | PLACENAME ':' ST picture      { makevar($1, PLACENAME, $4); $$ = $4; }
                     55:        | PLACENAME ':' position ST     { makevar($1, PLACENAME, $3); $$ = $3; }
                     56:         | VARNAME '=' expr ST          { makevar($1, VARNAME, $3); $$ = $1; }
                     57:        | DIR                           { setdir($1); }
                     58:        | PRINT expr ST                 { printexpr($2); }
                     59:        | PRINT position ST             { printpos($2); }
                     60:        | ST
                     61:        ;
                     62: 
                     63: leftbrace:
                     64:          '{'                   { leftthing('{'); }
                     65:        ;
                     66: 
                     67: prim:
                     68:          BOX attrlist          { $$ = boxgen($1); }
                     69:        | CIRCLE attrlist       { $$ = circgen($1); }
                     70:        | ELLIPSE attrlist      { $$ = circgen($1); }
                     71:        | ARC attrlist          { $$ = arcgen($1); }
                     72:        | LINE attrlist         { $$ = linegen($1); }
                     73:        | ARROW attrlist        { $$ = linegen($1); }
                     74:        | SPLINE attrlist       { $$ = splinegen($1); }
                     75:        | MOVE attrlist         { $$ = movegen($1); }
                     76:        | TEXT attrlist         { $$ = textgen($1); }
                     77:        | TROFF                 { $$ = troffgen($1); }
                     78:        | lbracket piclist ']' { $$=rightthing($1,']'); } attrlist
                     79:                                { $$ = blockgen($1, $2, $4); }
                     80:        ;
                     81: 
                     82: lbracket:
                     83:          '['                   { $$ = leftthing('['); }
                     84:        ;
                     85: 
                     86: attrlist:
                     87:          attrlist attr
                     88:        | /* empty */           { makeattr(0, 0); }
                     89:        ;
                     90: 
                     91: attr:
                     92:          ATTR opt_expr         { makeattr($1, $2); }
                     93:        | DIR opt_expr          { makeattr($1, $2); }
                     94:        | FROM position         { makeattr($1, $2); }
                     95:        | TO position           { makeattr($1, $2); }
                     96:        | AT position           { makeattr($1, $2); }
                     97:        | BY position           { makeattr($1, $2); }
                     98:        | WITH CORNER           { makeattr(WITH, $2); }
                     99:        | WITH '.' PLACENAME    { makeattr(PLACE, getblock(getlast(1,BLOCK), $3)); }
                    100:        | WITH position         { makeattr(PLACE, $2); }
                    101:        | SAME                  { makeattr(SAME, $1); }
                    102:        | textattr              { makeattr($1, 0); }
                    103:        | HEAD                  { makeattr(HEAD, $1); }
                    104:        | DOT opt_expr          { makeattr(DOT, $2); }
                    105:        | DASH opt_expr         { makeattr(DASH, $2); }
                    106:        | CHOP opt_expr         { makeattr(CHOP, $2); }
                    107:        | textlist
                    108:        ;
                    109: 
                    110: opt_expr:
                    111:          expr
                    112:        | /* empty */           { $$ = 0; }
                    113:        ;
                    114: 
                    115: textlist:
                    116:          TEXT                  { makeattr(CENTER, $1); }
                    117:        | TEXT textattr         { makeattr($2, $1); }
                    118:        | textlist TEXT         { makeattr(CENTER, $2); }
                    119:        | textlist TEXT textattr { makeattr($3, $2); }
                    120:        ;
                    121: 
                    122: textattr:
                    123:          LJUST
                    124:        | RJUST
                    125:        | SPREAD
                    126:        | FILL
                    127:        | CENTER
                    128:        | ABOVE
                    129:        | BELOW
                    130:        ;
                    131: 
                    132: position:              /* absolute, not relative */
                    133:        | place
                    134:        | expr ',' expr                 { $$ = makepos($1, $3); }
                    135:        | position '+' expr ',' expr    { $$ = fixpos($1, $3, $5); }
                    136:        | position '-' expr ',' expr    { $$ = fixpos($1, -$3, -$5); }
                    137:        | '(' expr ',' expr ')'                 { $$ = makepos($2, $4); }
                    138:        | position '+' '(' expr ',' expr ')'    { $$ = fixpos($1, $4, $6); }
                    139:        | position '-' '(' expr ',' expr ')'    { $$ = fixpos($1, -$4, -$6); }
                    140:        | '(' place ',' place ')'       { $$ = makepos(getcomp($2,DOTX), getcomp($4,DOTY)); }
                    141:        | expr { between=lastfloat; } '<' position ',' position '>'
                    142:                                        { $$ = makebetween($1, $4, $6); }
                    143:        | expr { between=lastfloat; } BETWEEN position AND position
                    144:                                        { $$ = makebetween($1, $4, $6); }
                    145:        ;
                    146: 
                    147: place:
                    148:          PLACENAME             { $$ = getpos(getvar($1), 0); }
                    149:        | PLACENAME CORNER      { $$ = getpos(getvar($1), $2); }
                    150:        | CORNER PLACENAME      { $$ = getpos(getvar($2), $1); }
                    151:        | HERE                  { $$ = gethere($1); }
                    152:        | last type             { $$ = getlast($1, $2); }
                    153:        | last type CORNER      { $$ = getpos(getlast($1, $2), $3); }
                    154:        | CORNER last type      { $$ = getpos(getlast($2, $3), $1); }
                    155:        | NTH type              { $$ = getfirst($1, $2); }
                    156:        | NTH type CORNER       { $$ = getpos(getfirst($1, $2), $3); }
                    157:        | CORNER NTH type       { $$ = getpos(getfirst($2, $3), $1); }
                    158:        | blockname
                    159:        | blockname CORNER      { $$ = getpos($1, $2); }
                    160:        | CORNER blockname      { $$ = getpos($2, $1); }
                    161:        ;
                    162: 
                    163: blockname:
                    164:          last BLOCK '.' PLACENAME      { $$ = getblock(getlast($1,$2), $4); }
                    165:        | NTH BLOCK '.' PLACENAME       { $$ = getblock(getfirst($1,$2), $4); }
                    166:        | PLACENAME '.' PLACENAME       { $$ = getblock(getvar($1), $3); }
                    167:        ;
                    168: 
                    169: last:
                    170:          last LAST             { $$ = $1 + 1; }
                    171:        | NTH LAST              { $$ = $1; }
                    172:        | LAST                  { $$ = 1; }
                    173:        ;
                    174: 
                    175: type:
                    176:          BOX
                    177:        | CIRCLE
                    178:        | ELLIPSE
                    179:        | ARC
                    180:        | LINE
                    181:        | ARROW
                    182:        | SPLINE
                    183:        | BLOCK
                    184:        ;
                    185: 
                    186: expr:
                    187:          expr '+' expr         { $$ = $1 + $3; }
                    188:        | expr '-' expr         { $$ = $1 - $3; }
                    189:        | expr '*' expr         { $$ = $1 * $3; }
                    190:        | expr '/' expr         { $$ = $1 / $3; }
                    191:        | expr '%' expr         { $$ = $1 % $3; }
                    192:        | '-' expr %prec UMINUS { $$ = -$2; }
                    193:        | '(' expr ')'          { $$ = $2; }
                    194:        | VARNAME               { $$ = getvar($1); }
                    195:        | NUMBER
                    196:        | place DOTX            { $$ = getcomp($1, $2); }
                    197:        | place DOTY            { $$ = getcomp($1, $2); }
                    198:        | place DOTHT           { $$ = getcomp($1, $2); }
                    199:        | place DOTWID          { $$ = getcomp($1, $2); }
                    200:        | place DOTRAD          { $$ = getcomp($1, $2); }
                    201:        ;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.