Changeset ae35b67 in git


Ignore:
Timestamp:
Jul 24, 1998, 6:41:14 PM (25 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'df6a8e29030ff93c6ad53051028727af7d339fa0')
Children:
28500c27ec6b0c23d7724b5e89704758cd004106
Parents:
a8575b6ce6d56b755805426e91fb43845420eed8
Message:
* hannes: fixes for "expr-list" operations


git-svn-id: file:///usr/local/Singular/svn/trunk@2372 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/Makefile.in

    ra8575b rae35b67  
    137137.y.cc:
    138138        @if test "x${BISON}" = x; then \
    139                 echo Error: no lex given, could not rebuilt scanner.cc;\
     139                echo Error: no bison given, could not rebuilt grammar.cc;\
    140140                exit 1; \
    141141        fi
  • Singular/grammar.y

    ra8575b rae35b67  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: grammar.y,v 1.41 1998-07-23 09:06:59 Singular Exp $ */
     4/* $Id: grammar.y,v 1.42 1998-07-24 16:41:13 Singular Exp $ */
    55/*
    66* ABSTRACT: SINGULAR shell grammatik
     
    273273/*%nonassoc '=' PLUSEQUAL DOTDOT*/
    274274%nonassoc '=' DOTDOT COLONCOLON
     275%left ','
    275276%left '|' '&'
    276277%left EQUAL_EQUAL NOTEQUAL
     
    282283%left '[' ']'
    283284%left '(' ')'
    284 %left PLUSPLUS
    285 %left MINUSMINUS
     285%left PLUSPLUS MINUSMINUS
    286286
    287287%%
     
    343343            currentVoice->ifsw=0;
    344344            if (inerror)
    345             {
    346               if ((inerror!=3) && ($1.i<UMINUS) && ($1.i>' '))
     345            {
     346              if ((inerror!=3) && ($1.i<UMINUS) && ($1.i>' '))
    347347              {
    348348                // 1: yyerror called
     
    351351                inerror=3;
    352352                Print(" error at token `%s`\n",iiTwoOps($1.i));
    353               }         
     353              }
    354354            }
    355355            if (!errorreported) WerrorS("...parse error");
     
    360360              feBufferTypes t=currentVoice->Typ();
    361361              //PrintS("leaving yyparse\n");
    362               exitBuffer(BT_proc);
     362              exitBuffer(BT_proc);
    363363              if (t==BT_example)
    364364                YYACCEPT;
     
    535535            $$ = $1;
    536536          }
    537         | '(' expr ',' exprlist ')'
    538           {
    539             leftv v = &$2;
    540             while (v->next!=NULL)
    541             {
    542               v=v->next;
    543             }
    544             v->next = (leftv)Alloc(sizeof(sleftv));
    545             memcpy(v->next,&($4),sizeof(sleftv));
    546             $$ = $2;
    547           }
    548537        ;
    549538
     
    554543          }
    555544        | elemexpr       { $$ = $1; }
    556         | '(' expr ')'    { $$ = $2; }
     545        | '(' exprlist ')'    { $$ = $2; }
    557546        | expr '[' expr ',' expr ']'
    558547          {
     
    13321321            $1.Print(&sLastPrinted);
    13331322            $1.CleanUp();
    1334             if (errorreported) YYERROR;
     1323            if (errorreported) YYERROR;
    13351324          }
    13361325        ;
  • Singular/iparith.cc

    ra8575b rae35b67  
    523523  return FALSE;
    524524}
     525static BOOLEAN jjOP_REST(leftv res, leftv u, leftv v)
     526{
     527  if (u->Next()!=NULL)
     528  {
     529    u=u->next;
     530    res->next = (leftv)Alloc(sizeof(sleftv));
     531    return iiExprArith2(res->next,u,iiOp,v);
     532  }
     533  else if (v->Next()!=NULL)
     534  {
     535    v=v->next;
     536    res->next = (leftv)Alloc(sizeof(sleftv));
     537    return iiExprArith2(res->next,u,iiOp,v);
     538  }
     539  return FALSE;
     540}
    525541static BOOLEAN jjPOWER_I(leftv res, leftv u, leftv v)
    526542{
     
    544560      Warn("int overflow(^), result may be wrong");
    545561    res->data = (char *)rc;
     562    if (u!=NULL) return jjOP_REST(res,u,v);
    546563    return FALSE;
    547564  }
     
    565582  nPower(n,e,(number*)&res->data);
    566583  nDelete(&n);
     584  if (u!=NULL) return jjOP_REST(res,u,v);
    567585  return FALSE;
    568586}
     
    570588{
    571589  res->data = (char *)pPower((poly)u->CopyD(POLY_CMD),(int)v->Data());
     590  if (u!=NULL) return jjOP_REST(res,u,v);
    572591  return FALSE;
    573592}
     
    575594{
    576595  res->data = (char *)idPower((ideal)(u->Data()),(int)(v->Data()));
     596  if (u!=NULL) return jjOP_REST(res,u,v);
    577597  return FALSE;
    578598}
     
    585605    if (v==NULL) return FALSE;      /* u==NULL, v==NULL */
    586606    if (iiOp=='-')                  /* u==NULL, v<>NULL, iiOp=='-'*/
     607    {
     608      if (res->next==NULL)
     609        res->next = (leftv)Alloc(sizeof(sleftv));
    587610      return iiExprArith1(res->next,v,'-');
     611    }
    588612    loop                            /* u==NULL, v<>NULL, iiOp=='+' */
    589613    {
     
    733757    Warn("int overflow(*), result may be wrong");
    734758  res->data = (char *)c;
    735   if (u->Next()!=NULL)
    736   {
    737     u=u->next;
    738     res->next = (leftv)Alloc(sizeof(sleftv));
    739     return iiExprArith2(res->next,u,iiOp,v);
    740   }
    741   else if (v->Next()!=NULL)
    742   {
    743     v=v->next;
    744     res->next = (leftv)Alloc(sizeof(sleftv));
    745     return iiExprArith2(res->next,u,iiOp,v);
    746   }
     759  if ((u->Next()!=NULL) || (v->Next()!=NULL))
     760    return jjOP_REST(res,u,v);
    747761  return FALSE;
    748762}
    749763static BOOLEAN jjTIMES_N(leftv res, leftv u, leftv v)
    750764{
    751   number a;
    752   number b;
    753 
    754   if (v->next==NULL)
    755   {
    756     a=(number)u->Data();
    757     if (u->next==NULL)
    758     {
    759       res->data = (char *)(nMult( a, (number)v->Data()));
    760       return FALSE;
    761     }
    762     // u->next exists: copy v
    763     b=(number)v->Data();
    764     res->data = (char *)(nMult( a, b));
    765     res->next = (leftv)Alloc(sizeof(sleftv));
    766     res=res->next;
    767     return iiExprArith2(res,u->next,iiOp,v);
    768   }
    769   // v->next exists: copy u
    770   a=nCopy((number)u->Data());
    771   b=(number)v->CopyD();
    772   res->data = (char *)(nMult( a, b));
    773   res->next = (leftv)Alloc(sizeof(sleftv));
    774   return iiExprArith2(res->next,u,iiOp,v->next);
     765  res->data = (char *)(nMult( (number)u->Data(), (number)v->Data()));
     766  if ((v->next!=NULL) || (u->next!=NULL))
     767    return jjOP_REST(res,u,v);
     768  return FALSE;
    775769}
    776770static BOOLEAN jjTIMES_P(leftv res, leftv u, leftv v)
     
    791785    b=pCopy((poly)v->Data());
    792786    res->data = (char *)(pMult( a, b));
    793     res->next = (leftv)Alloc(sizeof(sleftv));
    794     res=res->next;
    795     return iiExprArith2(res,u->next,iiOp,v);
     787    return jjOP_REST(res,u,v);
    796788  }
    797789  // v->next exists: copy u
     
    799791  b=(poly)v->CopyD();
    800792  res->data = (char *)(pMult( a, b));
    801   res->next = (leftv)Alloc(sizeof(sleftv));
    802   return iiExprArith2(res->next,u,iiOp,v->next);
     793  return jjOP_REST(res,u,v);
    803794}
    804795static BOOLEAN jjTIMES_ID(leftv res, leftv u, leftv v)
    805796{
    806797  res->data = (char *)idMult((ideal)u->Data(),(ideal)v->Data());
     798  if ((v->next!=NULL) || (u->next!=NULL))
     799    return jjOP_REST(res,u,v);
    807800  return FALSE;
    808801}
     
    815808     return TRUE;
    816809  }
     810  if ((v->next!=NULL) || (u->next!=NULL))
     811    return jjOP_REST(res,u,v);
    817812  return FALSE;
    818813}
     
    859854     return TRUE;
    860855  }
     856  if ((v->next!=NULL) || (u->next!=NULL))
     857    return jjOP_REST(res,u,v);
    861858  return FALSE;
    862859}
Note: See TracChangeset for help on using the changeset viewer.