Changeset 922e4d in git


Ignore:
Timestamp:
Mar 21, 1997, 3:15:22 PM (27 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
9c7667c132e7a9924e9e92fb80f4ca2d6cd4dd0a
Parents:
4f568c15ac592b67d6d689c797d299502aebc194
Message:
* hannes: optimized grammar.y: removed intexpr


git-svn-id: file:///usr/local/Singular/svn/trunk@64 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/grammar.y

    r4f568c r922e4d  
    33****************************************/
    44/* $Log: not supported by cvs2svn $
     5 * Revision 1.1.1.1  1997/03/19  13:18:55  obachman
     6 * Imported Singular sources
     7 *
    58*/
    69
     
    255258%token <i> SYSVAR
    256259
    257 %type <i>    intexpr
    258 
    259260%type <name> extendedid
    260261%type <lv>   rlist ordering OrderingList orderelem
     
    468469            $2.CleanUp();
    469470          }
    470         | intexpr
     471        | INT_CONST
    471472          {
    472473            memset(&$$,0,sizeof($$));
    473             $$.rtyp  = INT_CMD;
    474             $$.data = (void *)$1;
    475           }
    476         | SYSVAR
    477           {
    478             memset(&$$,0,sizeof($$));
    479             $$.rtyp = $1;
    480             $$.data = $$.Data();
    481           }
    482         | stringexpr
    483           {
    484             memset(&$$,0,sizeof($$));
    485             $$.rtyp  = STRING_CMD;
    486             $$.data = $1;
    487           }
    488         ;
    489 
    490 exprlist:
    491         expr ',' exprlist
    492           {
    493             leftv v = &$1;
    494             while (v->next!=NULL)
    495             {
    496               v=v->next;
    497             }
    498             v->next = (leftv)Alloc(sizeof(sleftv));
    499             memcpy(v->next,&($3),sizeof(sleftv));
    500             $$ = $1;
    501           }
    502         | expr
    503           {
    504             $$ = $1;
    505           }
    506         | '(' expr ',' exprlist ')'
    507           {
    508             leftv v = &$2;
    509             while (v->next!=NULL)
    510             {
    511               v=v->next;
    512             }
    513             v->next = (leftv)Alloc(sizeof(sleftv));
    514             memcpy(v->next,&($4),sizeof(sleftv));
    515             $$ = $2;
    516           }
    517         ;
    518 
    519 expr:   expr_arithmetic
    520           {
    521             /*if ($1.typ == eunknown) YYERROR;*/
    522             $$ = $1;
    523           }
    524         | elemexpr        { $$ = $1; }
    525         | '(' expr ')'    { $$ = $2; }
    526         | expr '[' expr ',' expr ']'
    527           {
    528             if(iiExprArith3(&$$,'[',&$1,&$3,&$5)) YYERROR;
    529           }
    530         | expr '[' expr ']'
    531           {
    532             if(iiExprArith2(&$$,&$1,'[',&$3)) YYERROR;
    533           }
    534         | ROOT_DECL '(' expr ')'
    535           {
    536             if(iiExprArith1(&$$,&$3,$1)) YYERROR;
    537           }
    538         | ROOT_DECL_LIST '(' exprlist ')'
    539           {
    540             if(iiExprArithM(&$$,&$3,$1)) YYERROR;
    541           }
    542         | ROOT_DECL_LIST '(' ')'
    543           {
    544             if(iiExprArithM(&$$,NULL,$1)) YYERROR;
    545           }
    546         | RING_DECL '(' expr ')'
    547           {
    548             if(iiExprArith1(&$$,&$3,$1)) YYERROR;
    549           }
    550         | currring_lists '(' exprlist ')'
    551           {
    552             if(iiExprArithM(&$$,&$3,$1)) YYERROR;
    553           }
    554         | currring_lists '(' ')'
    555           {
    556             if(iiExprArithM(&$$,NULL,$1)) YYERROR;
    557           }
    558         | CMD_1 '(' expr ')'
    559           {
    560             if(iiExprArith1(&$$,&$3,$1)) YYERROR;
    561           }
    562         | CMD_2 '(' expr ',' expr ')'
    563           {
    564             if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
    565           }
    566         | CMD_3 '(' expr ',' expr ',' expr ')'
    567           {
    568             if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR;
    569           }
    570         | CMD_M '(' ')'
    571           {
    572             if(iiExprArithM(&$$,NULL,$1)) YYERROR;
    573           }
    574         | CMD_23 '(' expr ',' expr ')'
    575           {
    576             if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
    577           }
    578         | CMD_23 '(' expr ',' expr ',' expr ')'
    579           {
    580             if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR;
    581           }
    582         | CMD_12 '(' expr ')'
    583           {
    584             if(iiExprArith1(&$$,&$3,$1)) YYERROR;
    585           }
    586         | CMD_12 '(' expr ',' expr ')'
    587           {
    588             if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
    589           }
    590         | CMD_123 '(' expr ')'
    591           {
    592             if(iiExprArith1(&$$,&$3,$1)) YYERROR;
    593           }
    594         | CMD_123 '(' expr ',' expr ')'
    595           {
    596             if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
    597           }
    598         | CMD_123 '(' expr ',' expr ',' expr ')'
    599           {
    600             if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR;
    601           }
    602         | MATRIX_CMD '(' expr ',' expr ',' expr ')'
    603           {
    604             if(iiExprArith3(&$$,MATRIX_CMD,&$3,&$5,&$7)) YYERROR;
    605           }
    606         | MATRIX_CMD '(' expr ')'
    607           {
    608             if(iiExprArith1(&$$,&$3,MATRIX_CMD)) YYERROR;
    609           }
    610         | INTMAT_CMD '(' expr ')'
    611           {
    612             if(iiExprArith1(&$$,&$3,INTMAT_CMD)) YYERROR;
    613           }
    614         | CMD_M '(' exprlist ')'
    615           {
    616             if(iiExprArithM(&$$,&$3,$1)) YYERROR;
    617           }
    618         | quote_start expr quote_end
    619           {
    620             $$=$2;
    621           }
    622         | quote_start expr '=' expr quote_end
    623           {
    624             #ifdef SIQ
    625             siq++;
    626             if (siq>0)
    627             { if (iiExprArith2(&$$,&$2,'=',&$4)) YYERROR; }
    628             else
    629             #endif
    630             {
    631               memset(&$$,0,sizeof($$));
    632               $$.rtyp=NONE;
    633               if (iiAssign(&$2,&$4)) YYERROR;
    634             }
    635             #ifdef SIQ
    636             siq--;
    637             #endif
    638           }
    639         | EVAL  '('
    640           {
    641             #ifdef SIQ
    642             siq--;
    643             #endif
    644           }
    645           expr ')'
    646           {
    647             #ifdef SIQ
    648             if (siq<=0) $4.Eval();
    649             #endif
    650             $$=$4;
    651             #ifdef SIQ
    652             siq++;
    653             #endif
    654           }
    655           ;
    656 
    657 quote_start:    QUOTE  '('
    658           {
    659             #ifdef SIQ
    660             siq++;
    661             #endif
    662           }
    663           ;
    664 
    665 quote_end: ')'
    666           {
    667             #ifdef SIQ
    668             siq--;
    669             #endif
    670           }
    671           ;
    672 
    673 expr_arithmetic:
    674           expr  PLUSPLUS     %prec PLUSPLUS
    675           {
    676             if(iiExprArith1(&$$,&$1,PLUSPLUS)) YYERROR;
    677           }
    678         | expr  MINUSMINUS   %prec MINUSMINUS
    679           {
    680             if(iiExprArith1(&$$,&$1,MINUSMINUS)) YYERROR;
    681           }
    682         | expr  '+' expr
    683           {
    684             if(iiExprArith2(&$$,&$1,'+',&$3)) YYERROR;
    685           }
    686         | expr  '-' expr
    687           {
    688             if(iiExprArith2(&$$,&$1,'-',&$3)) YYERROR;
    689           }
    690         | expr  '*' expr
    691           {
    692             if(iiExprArith2(&$$,&$1,'*',&$3)) YYERROR;
    693           }
    694         | expr  '/' expr
    695           {
    696             if(iiExprArith2(&$$,&$1,'/',&$3)) YYERROR;
    697           }
    698         | expr  '^' expr
    699           {
    700             if(iiExprArith2(&$$,&$1,'^',&$3)) YYERROR;
    701           }
    702         | expr  '%' expr
    703           {
    704             if(iiExprArith2(&$$,&$1,'%',&$3)) YYERROR;
    705           }
    706         | expr  '>' expr
    707           {
    708             if(iiExprArith2(&$$,&$1,'>',&$3)) YYERROR;
    709           }
    710         | expr  '<' expr
    711           {
    712             if(iiExprArith2(&$$,&$1,'<',&$3)) YYERROR;
    713           }
    714         | expr  '&' expr
    715           {
    716             if(iiExprArith2(&$$,&$1,'&',&$3)) YYERROR;
    717           }
    718         | expr  '|' expr
    719           {
    720             if(iiExprArith2(&$$,&$1,'|',&$3)) YYERROR;
    721           }
    722         | expr  NOTEQUAL expr
    723           {
    724             if(iiExprArith2(&$$,&$1,NOTEQUAL,&$3)) YYERROR;
    725           }
    726         | expr  EQUAL_EQUAL expr
    727           {
    728             if(iiExprArith2(&$$,&$1,EQUAL_EQUAL,&$3)) YYERROR;
    729           }
    730         | expr  GE  expr
    731           {
    732             if(iiExprArith2(&$$,&$1,GE,&$3)) YYERROR;
    733           }
    734         | expr  LE expr
    735           {
    736             if(iiExprArith2(&$$,&$1,LE,&$3)) YYERROR;
    737           }
    738         | expr DOTDOT expr
    739           {
    740             if(iiExprArith2(&$$,&$1,DOTDOT,&$3)) YYERROR;
    741           }
    742         | NOT '(' expr ')'
    743           {
    744             memset(&$$,0,sizeof($$));
    745             int i; TESTSETINT($3,i);
    746             $$.rtyp  = INT_CMD;
    747             $$.data = (void *)(i == 0 ? 1 : 0);
    748           }
    749         | '-' expr %prec UMINUS
    750           {
    751             if(iiExprArith1(&$$,&$2,'-')) YYERROR;
    752           }
    753         ;
    754 
    755 left_value:
    756         declare_ip_variable cmdeq  { $$ = $1; }
    757         | exprlist '=' { $$ = $1; }
    758         ;
    759 
    760 intexpr:
    761         INT_CONST
    762           {
    763             $$ = atoi($1);
     474            int i = atoi($1);
    764475
    765476            /* check: out of range input */
     
    768479            {
    769480              char tmp[100];
    770               sprintf(tmp,"%d",$$);
    771               if (strcmp(tmp,$1))
     481              sprintf(tmp,"%d",i);
     482              if (strcmp(tmp,$1)!=0)
    772483              {
    773484                Werror("`%s` greater than %d(max. integer representation)"
     
    778489            /*remember not to FreeL($1)
    779490            *because it is a part of the scanner buffer*/
    780           }
    781         ;
     491            $$.rtyp  = INT_CMD;
     492            $$.data = (void *)i;
     493          }
     494        | SYSVAR
     495          {
     496            memset(&$$,0,sizeof($$));
     497            $$.rtyp = $1;
     498            $$.data = $$.Data();
     499          }
     500        | stringexpr
     501          {
     502            memset(&$$,0,sizeof($$));
     503            $$.rtyp  = STRING_CMD;
     504            $$.data = $1;
     505          }
     506        ;
     507
     508exprlist:
     509        expr ',' exprlist
     510          {
     511            leftv v = &$1;
     512            while (v->next!=NULL)
     513            {
     514              v=v->next;
     515            }
     516            v->next = (leftv)Alloc(sizeof(sleftv));
     517            memcpy(v->next,&($3),sizeof(sleftv));
     518            $$ = $1;
     519          }
     520        | expr
     521          {
     522            $$ = $1;
     523          }
     524        | '(' expr ',' exprlist ')'
     525          {
     526            leftv v = &$2;
     527            while (v->next!=NULL)
     528            {
     529              v=v->next;
     530            }
     531            v->next = (leftv)Alloc(sizeof(sleftv));
     532            memcpy(v->next,&($4),sizeof(sleftv));
     533            $$ = $2;
     534          }
     535        ;
     536
     537expr:   expr_arithmetic
     538          {
     539            /*if ($1.typ == eunknown) YYERROR;*/
     540            $$ = $1;
     541          }
     542        | elemexpr        { $$ = $1; }
     543        | '(' expr ')'    { $$ = $2; }
     544        | expr '[' expr ',' expr ']'
     545          {
     546            if(iiExprArith3(&$$,'[',&$1,&$3,&$5)) YYERROR;
     547          }
     548        | expr '[' expr ']'
     549          {
     550            if(iiExprArith2(&$$,&$1,'[',&$3)) YYERROR;
     551          }
     552        | ROOT_DECL '(' expr ')'
     553          {
     554            if(iiExprArith1(&$$,&$3,$1)) YYERROR;
     555          }
     556        | ROOT_DECL_LIST '(' exprlist ')'
     557          {
     558            if(iiExprArithM(&$$,&$3,$1)) YYERROR;
     559          }
     560        | ROOT_DECL_LIST '(' ')'
     561          {
     562            if(iiExprArithM(&$$,NULL,$1)) YYERROR;
     563          }
     564        | RING_DECL '(' expr ')'
     565          {
     566            if(iiExprArith1(&$$,&$3,$1)) YYERROR;
     567          }
     568        | currring_lists '(' exprlist ')'
     569          {
     570            if(iiExprArithM(&$$,&$3,$1)) YYERROR;
     571          }
     572        | currring_lists '(' ')'
     573          {
     574            if(iiExprArithM(&$$,NULL,$1)) YYERROR;
     575          }
     576        | CMD_1 '(' expr ')'
     577          {
     578            if(iiExprArith1(&$$,&$3,$1)) YYERROR;
     579          }
     580        | CMD_2 '(' expr ',' expr ')'
     581          {
     582            if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
     583          }
     584        | CMD_3 '(' expr ',' expr ',' expr ')'
     585          {
     586            if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR;
     587          }
     588        | CMD_M '(' ')'
     589          {
     590            if(iiExprArithM(&$$,NULL,$1)) YYERROR;
     591          }
     592        | CMD_23 '(' expr ',' expr ')'
     593          {
     594            if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
     595          }
     596        | CMD_23 '(' expr ',' expr ',' expr ')'
     597          {
     598            if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR;
     599          }
     600        | CMD_12 '(' expr ')'
     601          {
     602            if(iiExprArith1(&$$,&$3,$1)) YYERROR;
     603          }
     604        | CMD_12 '(' expr ',' expr ')'
     605          {
     606            if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
     607          }
     608        | CMD_123 '(' expr ')'
     609          {
     610            if(iiExprArith1(&$$,&$3,$1)) YYERROR;
     611          }
     612        | CMD_123 '(' expr ',' expr ')'
     613          {
     614            if(iiExprArith2(&$$,&$3,$1,&$5,TRUE)) YYERROR;
     615          }
     616        | CMD_123 '(' expr ',' expr ',' expr ')'
     617          {
     618            if(iiExprArith3(&$$,$1,&$3,&$5,&$7)) YYERROR;
     619          }
     620        | MATRIX_CMD '(' expr ',' expr ',' expr ')'
     621          {
     622            if(iiExprArith3(&$$,MATRIX_CMD,&$3,&$5,&$7)) YYERROR;
     623          }
     624        | MATRIX_CMD '(' expr ')'
     625          {
     626            if(iiExprArith1(&$$,&$3,MATRIX_CMD)) YYERROR;
     627          }
     628        | INTMAT_CMD '(' expr ')'
     629          {
     630            if(iiExprArith1(&$$,&$3,INTMAT_CMD)) YYERROR;
     631          }
     632        | CMD_M '(' exprlist ')'
     633          {
     634            if(iiExprArithM(&$$,&$3,$1)) YYERROR;
     635          }
     636        | quote_start expr quote_end
     637          {
     638            $$=$2;
     639          }
     640        | quote_start expr '=' expr quote_end
     641          {
     642            #ifdef SIQ
     643            siq++;
     644            if (siq>0)
     645            { if (iiExprArith2(&$$,&$2,'=',&$4)) YYERROR; }
     646            else
     647            #endif
     648            {
     649              memset(&$$,0,sizeof($$));
     650              $$.rtyp=NONE;
     651              if (iiAssign(&$2,&$4)) YYERROR;
     652            }
     653            #ifdef SIQ
     654            siq--;
     655            #endif
     656          }
     657        | EVAL  '('
     658          {
     659            #ifdef SIQ
     660            siq--;
     661            #endif
     662          }
     663          expr ')'
     664          {
     665            #ifdef SIQ
     666            if (siq<=0) $4.Eval();
     667            #endif
     668            $$=$4;
     669            #ifdef SIQ
     670            siq++;
     671            #endif
     672          }
     673          ;
     674
     675quote_start:    QUOTE  '('
     676          {
     677            #ifdef SIQ
     678            siq++;
     679            #endif
     680          }
     681          ;
     682
     683quote_end: ')'
     684          {
     685            #ifdef SIQ
     686            siq--;
     687            #endif
     688          }
     689          ;
     690
     691expr_arithmetic:
     692          expr  PLUSPLUS     %prec PLUSPLUS
     693          {
     694            if(iiExprArith1(&$$,&$1,PLUSPLUS)) YYERROR;
     695          }
     696        | expr  MINUSMINUS   %prec MINUSMINUS
     697          {
     698            if(iiExprArith1(&$$,&$1,MINUSMINUS)) YYERROR;
     699          }
     700        | expr  '+' expr
     701          {
     702            if(iiExprArith2(&$$,&$1,'+',&$3)) YYERROR;
     703          }
     704        | expr  '-' expr
     705          {
     706            if(iiExprArith2(&$$,&$1,'-',&$3)) YYERROR;
     707          }
     708        | expr  '*' expr
     709          {
     710            if(iiExprArith2(&$$,&$1,'*',&$3)) YYERROR;
     711          }
     712        | expr  '/' expr
     713          {
     714            if(iiExprArith2(&$$,&$1,'/',&$3)) YYERROR;
     715          }
     716        | expr  '^' expr
     717          {
     718            if(iiExprArith2(&$$,&$1,'^',&$3)) YYERROR;
     719          }
     720        | expr  '%' expr
     721          {
     722            if(iiExprArith2(&$$,&$1,'%',&$3)) YYERROR;
     723          }
     724        | expr  '>' expr
     725          {
     726            if(iiExprArith2(&$$,&$1,'>',&$3)) YYERROR;
     727          }
     728        | expr  '<' expr
     729          {
     730            if(iiExprArith2(&$$,&$1,'<',&$3)) YYERROR;
     731          }
     732        | expr  '&' expr
     733          {
     734            if(iiExprArith2(&$$,&$1,'&',&$3)) YYERROR;
     735          }
     736        | expr  '|' expr
     737          {
     738            if(iiExprArith2(&$$,&$1,'|',&$3)) YYERROR;
     739          }
     740        | expr  NOTEQUAL expr
     741          {
     742            if(iiExprArith2(&$$,&$1,NOTEQUAL,&$3)) YYERROR;
     743          }
     744        | expr  EQUAL_EQUAL expr
     745          {
     746            if(iiExprArith2(&$$,&$1,EQUAL_EQUAL,&$3)) YYERROR;
     747          }
     748        | expr  GE  expr
     749          {
     750            if(iiExprArith2(&$$,&$1,GE,&$3)) YYERROR;
     751          }
     752        | expr  LE expr
     753          {
     754            if(iiExprArith2(&$$,&$1,LE,&$3)) YYERROR;
     755          }
     756        | expr DOTDOT expr
     757          {
     758            if(iiExprArith2(&$$,&$1,DOTDOT,&$3)) YYERROR;
     759          }
     760        | NOT '(' expr ')'
     761          {
     762            memset(&$$,0,sizeof($$));
     763            int i; TESTSETINT($3,i);
     764            $$.rtyp  = INT_CMD;
     765            $$.data = (void *)(i == 0 ? 1 : 0);
     766          }
     767        | '-' expr %prec UMINUS
     768          {
     769            if(iiExprArith1(&$$,&$2,'-')) YYERROR;
     770          }
     771        ;
     772
     773left_value:
     774        declare_ip_variable cmdeq  { $$ = $1; }
     775        | exprlist '=' { $$ = $1; }
     776        ;
     777
    782778
    783779extendedid:
Note: See TracChangeset for help on using the changeset viewer.