Annotation of researchv9/jtools/src/Jpic/picy.y, revision 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.