Annotation of researchv10no/cmd/ideal/idyac.y, revision 1.1

1.1     ! root        1: %{
        !             2: #include "ideal.h"
        !             3: 
        !             4: extern BOXPTR boxlist;
        !             5: 
        !             6: yyerror (message)
        !             7: char *message;
        !             8: {
        !             9:        fprintf (stderr, "ideal: ");
        !            10:        fprintf (stderr, "%s ", message);
        !            11:        fprintf (stderr, "near line %d in file %s\n",
        !            12:                lineno,
        !            13:                filename
        !            14:        );
        !            15: }
        !            16: %}
        !            17: %token BOX VAR BDLIST PUT CONN TO USING
        !            18: %token CONSTRUCT DRAW OPAQUE LEFT CENTER RIGHT AT
        !            19: %token NAME CONST STRING
        !            20: %token LINE CIRCLE ARC SPLINE
        !            21: %token PATH
        !            22: %token INTERIOR EXTERIOR
        !            23: %token LBRACE RBRACE
        !            24: %token ELEWISE
        !            25: 
        !            26: %left '^'
        !            27: %left '+' '-'
        !            28: %left '*' '/' ELEWISE
        !            29: %left '['
        !            30: %left UMINUS
        !            31: 
        !            32: %%
        !            33: stuff  :figspec
        !            34:        |       /*empty*/
        !            35:        ;
        !            36: 
        !            37: figspec        :boxdef {
        !            38:                forget (((BOXPTR)$1)->name);
        !            39:                ((BOXPTR) $1)->next = boxlist;
        !            40:                boxlist = (BOXPTR) $1;
        !            41:        }
        !            42:        |figspec boxdef {
        !            43:                forget (((BOXPTR)$2)->name);
        !            44:                ((BOXPTR)$2)->next = boxlist;
        !            45:                boxlist = (BOXPTR) $2;
        !            46:        }
        !            47:        ;
        !            48: 
        !            49: boxdef :body           {$$ = $1;}
        !            50:        |BOX body       {$$ = $2;}
        !            51:        ;
        !            52: 
        !            53: body   :NAME LBRACE stmts RBRACE       {$$ = (int) boxgen ($1, (STMTPTR) $3);}
        !            54:        |NAME LBRACE RBRACE             {$$ = (int) boxgen ($1, (STMTPTR) NULL);}
        !            55:        ;
        !            56: 
        !            57: stmts   :stmt          {$$ = $1;}
        !            58:        |stmts stmt     {
        !            59:                if ($2) {
        !            60:                        ((STMTPTR)$2)->next = (STMTPTR)$1;
        !            61:                        $$ = $2;
        !            62:                } else
        !            63:                        $$ = $1;
        !            64:        }
        !            65:        ;
        !            66: 
        !            67: stmt   :varstmt ';'    {$$ = (int) stmtgen (VAR, (char *) $1);}
        !            68:        |eqnstmt ';'    {$$ = (int) stmtgen ('=', (char *) $1);}
        !            69:        |bdlist ';'     {$$ = (int) stmtgen (BDLIST, (char *) $1);}
        !            70:        |putstmt        {$$ = (int) stmtgen (PUT, (char *) $1);}
        !            71:        |connstmt ';'   {$$ = (int) stmtgen (CONN, (char *) $1);}
        !            72:        |penstmt ';'    {if ($1) {
        !            73:                                $$ = (int) stmtgen (USING, (char *) $1);
        !            74:                        } else {
        !            75:                                $$ = (int) NULL;
        !            76:                        }
        !            77:                }
        !            78:        |drawstmt ';'   {$$ = (int) stmtgen (DRAW, (char *) $1);}
        !            79:        |opaque ';'     {$$ = (int) stmtgen (OPAQUE, (char *) $1);}
        !            80:        |strstmt ';'    {$$ = (int) stmtgen (STRING, (char *) $1);}
        !            81:        |splstmt ';'    {$$ = (int) stmtgen (SPLINE, (char *) $1);}
        !            82:        |';'            {$$ = (int) NULL;}
        !            83:        |error ';'      {fprintf (stderr, "ideal: syntax error near line %d in file %s\n",
        !            84:                                lineno, filename);
        !            85:                        yyerrok;
        !            86:                        $$ = NULL;
        !            87:        }
        !            88:        ;
        !            89: 
        !            90: varstmt        :VAR varlist    {$$ = (int) $2;}
        !            91:        ;
        !            92: 
        !            93: varlist        :NAME   {$$ = (int) namegen ($1);}
        !            94:        |varlist ',' NAME       {
        !            95:                NAMEPTR temp;
        !            96:                temp = (NAMEPTR) namegen ($3);
        !            97:                temp->next = (NAMEPTR)$1;
        !            98:                $$ = (int) temp;
        !            99:        }
        !           100:        ;
        !           101: 
        !           102: eqnstmt        :expr '=' expr          {$$ = (int) intlgen ('=', (EXPR) $1, (EXPR) $3);}
        !           103:        |expr '~' expr          {$$ = (int) intlgen ('~', (EXPR) $1, (EXPR) $3);}
        !           104:        |eqnstmt '=' expr       {$$ = (int) intlgen ('=', (EXPR) $1, (EXPR) $3);}
        !           105:        |eqnstmt '~' expr       {$$ = (int) intlgen ('~', (EXPR) $1, (EXPR) $3);}
        !           106:        ;
        !           107: 
        !           108: bdlist :BDLIST '=' exprlist    {$$ = (int) $3;}
        !           109:        ;
        !           110: 
        !           111: exprlist:expr          {$$ = (int) exprgen ((EXPR) $1);}
        !           112:        |exprlist ',' expr      {
        !           113:                EXPRPTR temp;
        !           114:                temp = (EXPRPTR) exprgen ((EXPR) $3);
        !           115:                temp->next = (EXPRPTR)$1;
        !           116:                $$ = (int) temp;
        !           117:        }
        !           118:        ;
        !           119: 
        !           120: putstmt        :putword NAME ':' body  {$$ = (int) putgen ($2, (BOXPTR) $4, $1);}
        !           121:        |putword body           {$$ = (int) putgen (NULL, (BOXPTR) $2, $1);}
        !           122:        |NAME ':' putword body  {$$ = (int) putgen ($1, (BOXPTR) $4, $3);}
        !           123:        ;
        !           124: 
        !           125: putword        :PUT            {$$ = $1;}
        !           126:        |CONSTRUCT      {$$ = $1;}
        !           127:        ;
        !           128: 
        !           129: connstmt:CONN knotlist {$$ = (int) $2;}
        !           130:        ;
        !           131: 
        !           132: penstmt        :CONN knotlist USING expr body '<' expr ',' expr '>'
        !           133:                {if (!((EXPRPTR) $2)->next || ((EXPRPTR) $2)->next->next) {
        !           134:                        fprintf (stderr, "ideal: improper pen statement\n   >>>pen ignored\n");
        !           135:                        $$ = (int) NULL;
        !           136:                } else {
        !           137:                        $$ = (int) pengen (
        !           138:                                ((EXPRPTR) $2)->next->expr,
        !           139:                                ((EXPRPTR) $2)->expr,
        !           140:                                (EXPR) $4,
        !           141:                                (EXPR) $7,
        !           142:                                (EXPR) $9,
        !           143:                                (BOXPTR) $5
        !           144:                        );
        !           145:                        tryfree(((EXPRPTR) $2)->next);
        !           146:                        tryfree((EXPRPTR) $2);
        !           147:                }
        !           148:        }
        !           149:        ;
        !           150: 
        !           151: drawstmt:DRAW NAME     {$$ = (int) miscgen ($2);}
        !           152:        ;
        !           153: 
        !           154: opaque :OPAQUE {$$ = (int) miscgen (INTERIOR);}
        !           155:        |OPAQUE INTERIOR        {$$ = (int) miscgen (INTERIOR);}
        !           156:        |OPAQUE EXTERIOR        {$$ = (int) miscgen (EXTERIOR);}
        !           157:        ;
        !           158: 
        !           159: strstmt        :LEFT STRING AT expr    {$$ = (int) strgen (LEFT, (char *) $2, (EXPR) $4);}
        !           160:        |CENTER STRING AT expr  {$$ = (int) strgen (CENTER, (char *) $2, (EXPR) $4);}
        !           161:        |STRING AT expr {$$ = (int) strgen (CENTER, (char *) $1, (EXPR) $3);}
        !           162:        |RIGHT STRING AT expr   {$$ = (int) strgen (RIGHT, (char *) $2, (EXPR) $4);}
        !           163:        ;
        !           164: 
        !           165: splstmt        :SPLINE knotlist        {$$ = (int) $2;}
        !           166: 
        !           167: knotlist:expr          {$$ = (int) exprgen ((EXPR) $1);}
        !           168:        |knotlist TO expr       {
        !           169:                EXPRPTR temp;
        !           170:                temp = (EXPRPTR) exprgen ((EXPR) $3);
        !           171:                temp->next = (EXPRPTR) $1;
        !           172:                $$ = (int) temp;
        !           173:        }
        !           174:        ;
        !           175: 
        !           176: expr   :'-' expr       %prec UMINUS
        !           177:                {$$ = (int) intlgen ('-', (EXPR) NULL, (EXPR) $2);}
        !           178:        |expr '+' expr  {$$ = (int) intlgen ('+', (EXPR) $1, (EXPR) $3);}
        !           179:        |expr '-' expr  {$$ = (int) intlgen ('-', (EXPR) $1, (EXPR) $3);}
        !           180:        |expr '*' expr  {$$ = (int) intlgen ('*', (EXPR) $1, (EXPR) $3);}
        !           181:        |expr '/' expr  {$$ = (int) intlgen ('/', (EXPR) $1, (EXPR) $3);}
        !           182:        |expr '*' ',' expr      %prec ELEWISE
        !           183:                {$$ = (int) intlgen (ELEWISE, (EXPR) $1, (EXPR) $4);}
        !           184:        |'^' expr       {$$ = (int) intlgen ('^', (EXPR) NULL, (EXPR) $2);}
        !           185:        |pathname               {$$ = (int) extlgen ((NAMEPTR) $1);}
        !           186:        |CONST                  {$$ = $1;}
        !           187:        |'(' expr ')'           {$$ = $2;}
        !           188:        |'(' expr ',' expr ')'  {$$ = (int) intlgen (',', (EXPR) $2, (EXPR) $4);}
        !           189:        |NAME '(' exprlist ')'  {$$ = (int) intlgen (NAME, (EXPR) $1, (EXPR) $3);}
        !           190:        |expr '[' expr ',' expr ']'     {
        !           191:                $$ = (int) bracket (
        !           192:                        (EXPR) $1,
        !           193:                        (EXPR) $3,
        !           194:                        (EXPR) $5
        !           195:                );
        !           196:        }
        !           197:        ;
        !           198: 
        !           199: pathname:NAME  {$$ = (int) namegen ($1);}
        !           200:        |NAME '.' pathname      {
        !           201:                NAMEPTR temp;
        !           202:                temp = (NAMEPTR) namegen($1);
        !           203:                temp->next = (NAMEPTR)$3;
        !           204:                $$ = (int) temp;
        !           205:        }
        !           206:        ;

unix.superglobalmegacorp.com

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