Diff for /capa/capa51/pProj/capaGrammarDef.y between versions 1.6 and 1.9

version 1.6, 1999/11/08 22:30:02 version 1.9, 2000/02/22 18:19:02
Line 36 Line 36
                                      case S_VAR:  case S_CONSTANT: \                                       case S_VAR:  case S_CONSTANT: \
                                               printf("STR(%s)\n",(xx)->s_str); break; \                                                printf("STR(%s)\n",(xx)->s_str); break; \
                                } }                                 } }
 #else  #else  /* YACC_DBUG */
 #define  YYDBUG_PR1(xx)        { }  #define  YYDBUG_PR1(xx)        { }
 #define  YYDBUG_PR2(xx,yy)     { }  #define  YYDBUG_PR2(xx,yy)     { }
 #define  YYDBUG_PR3(xx,yy,zz)  { }  #define  YYDBUG_PR3(xx,yy,zz)  { }
 #define  YYDBUG_PR4(xx,yy,zz,aa)  { }  #define  YYDBUG_PR4(xx,yy,zz,aa)  { }
 #define  YYDBUG_SYM(xx)        { }  #define  YYDBUG_SYM(xx)        { }
 #endif  #endif /* YACC_DBUG */
   
 int   yylex();  int   yylex();
 void  yyerror(char*);  void  yyerror(char*);
 void  free_calc_expr(Symbol*);  void  free_calc_expr(Symbol*);
   void assign_pts (Symbol *, Symbol *, Symbol *);
 /******************************************************************************/  /******************************************************************************/
 /* GLOBAL VARIABLES                                                           */  /* GLOBAL VARIABLES                                                           */
 /******************************************************************************/  /******************************************************************************/
Line 287  statement    :  IDENTIFIER '=' calc_expr Line 288  statement    :  IDENTIFIER '=' calc_expr
              ;               ;
   
 rqo_def      :  rqo_speca             { rqo_1spec(); }  rqo_def      :  rqo_speca             { rqo_1spec(); }
              |  rqo_speca "," rqo_def { rqo_2spec(); }               |  rqo_speca ',' rqo_def { rqo_2spec(); }
              ;               ;
   
 rqo_speca    : an_integer                 {start_rqo_type(SINGLE);append_rqo($1);}  rqo_speca    : an_integer                 {start_rqo_type(SINGLE);append_rqo($1);}
              | an_integer "!"             {start_rqo_type(IMMOBILE);append_rqo($1);}               | an_integer '!'             {start_rqo_type(IMMOBILE);append_rqo($1);}
              | an_integer "-" an_integer  {start_rqo_type(RANGE);append_rqo($1);               | an_integer '-' an_integer  {start_rqo_type(RANGE);append_rqo($1);
                                            append_rqo($3);                                             append_rqo($3);
                                           }                                            }
              | an_integer "~" rqo_specb   {prefix_rqo($1);}               | an_integer '~' rqo_specb   {prefix_rqo($1);}
              | an_integer "+" rqo_specc   {prefix_rqo($1);}               | an_integer '+' rqo_specc   {prefix_rqo($1);}
              ;               ;
   
 rqo_specb    : an_integer                 {start_rqo_type(ALL_MIX);append_rqo($1);}  rqo_specb    : an_integer                 {start_rqo_type(ALL_MIX);append_rqo($1);}
              | an_integer "~" rqo_specb   {prefix_rqo($1);}               | an_integer '~' rqo_specb   {prefix_rqo($1);}
              | an_integer "+" an_integer  {start_rqo_type(LAST_FIXED);append_rqo($1);               | an_integer '+' an_integer  {start_rqo_type(LAST_FIXED);append_rqo($1);
                                            append_rqo($3);}                                             append_rqo($3);}
              ;               ;
   
 rqo_specc    : an_integer                 {start_rqo_type(ALL_FIXED);append_rqo($1);}  rqo_specc    : an_integer                 {start_rqo_type(ALL_FIXED);append_rqo($1);}
              | an_integer "+" rqo_specd   {prefix_rqo($1);}               | an_integer '+' rqo_specd   {prefix_rqo($1);}
              | an_integer "~" rqo_spece   {prefix_rqo($1);}               | an_integer '~' rqo_spece   {prefix_rqo($1);}
              ;               ;
   
 rqo_specd    : an_integer                 {start_rqo_type(ALL_FIXED);append_rqo($1);}  rqo_specd    : an_integer                 {start_rqo_type(ALL_FIXED);append_rqo($1);}
              | an_integer "+" rqo_specd   {prefix_rqo($1);}               | an_integer '+' rqo_specd   {prefix_rqo($1);}
              ;               ;
   
 rqo_spece    : an_integer                 {start_rqo_type(FIRST_FIXED);append_rqo($1);}  rqo_spece    : an_integer                 {start_rqo_type(FIRST_FIXED);append_rqo($1);}
              | an_integer "~" rqo_spece   {prefix_rqo($1);}               | an_integer '~' rqo_spece   {prefix_rqo($1);}
              | an_integer "+" an_integer  {start_rqo_type(BOTH_FIXED);append_rqo($1);               | an_integer '+' an_integer  {start_rqo_type(BOTH_FIXED);append_rqo($1);
                                            append_rqo($3);}                                             append_rqo($3);}
              ;               ;
   
Line 844  an_integer   : I_CONSTANT Line 845  an_integer   : I_CONSTANT
 a_real       : R_CONSTANT               { $$ = $1; }   a_real       : R_CONSTANT               { $$ = $1; } 
              ;               ;
   
 an_array     : ARRAY_ID '[' calc_expr ']'     {   $$=get_array_symbol($1,$3,1);   }   an_array     : ARRAY_ID '[' calc_expr ']'     {   
                                            YYDBUG_PR1(" an_array <= ARRAY_ID '['calc_expr ']' ");
                                            $$=get_array_symbol($1,$3,1);   
                                                  } 
              ;               ;
   
 startQ       :                  { /* first matching will occur before first line of input text */  startQ       :                  { /* first matching will occur before first line of input text */
Line 927  Symbol *name,*index;int free_symbols; Line 931  Symbol *name,*index;int free_symbols;
   sprintf(key,"%s[%s]",name->s_name,tmp);    sprintf(key,"%s[%s]",name->s_name,tmp);
       
   a_p = find_arrayid(name->s_name);   /* use the array name to search array tree */    a_p = find_arrayid(name->s_name);   /* use the array name to search array tree */
                                       /* */                                        /* did not check for error! */
   s_p = find_array_by_index(a_p,key); /* use the index portion to search along array linked list */    s_p = find_array_by_index(a_p,key); /* use the index portion to search along array linked list */
   capa_mfree((char *)tmp); capa_mfree((char *)key);    capa_mfree((char *)tmp); capa_mfree((char *)key);
       
Line 1088  append_warn(type,str) int type;char *str Line 1092  append_warn(type,str) int type;char *str
 /*********** if *b is a constant symbol, destroy (free) b ********************/  /*********** if *b is a constant symbol, destroy (free) b ********************/
 /*********** if *a is a var symbol, create a new symbol **********************/  /*********** if *a is a var symbol, create a new symbol **********************/
 /*                 do not free(*a)     */  /*                 do not free(*a)     */
 /*           */  /*  If either a or b is invalid it propagates the error up the parse tree    */
 Symbol *  Symbol *
 symbols_op(a, b, op) Symbol *a; Symbol *b; int op;  symbols_op(a, b, op) Symbol *a; Symbol *b; int op;
 {  {
Line 1103  if( a->s_type == IDENTIFIER || b->s_type Line 1107  if( a->s_type == IDENTIFIER || b->s_type
    if(a->s_type == IDENTIFIER) { /* a is IDENTIFIER */     if(a->s_type == IDENTIFIER) { /* a is IDENTIFIER */
      sprintf(warn_msg,"var \"%s\" not defined before use.\n", a->s_name);       sprintf(warn_msg,"var \"%s\" not defined before use.\n", a->s_name);
      capa_msg(MESSAGE_ERROR,warn_msg);       capa_msg(MESSAGE_ERROR,warn_msg);
      return (b);       return (a);
    } else { /* b is IDENTIFIER */     } else { /* b is IDENTIFIER */
      sprintf(warn_msg,       sprintf(warn_msg,"var \"%s\" not defined before use.\n",b->s_name);
       "var \"%s\" not defined before use.\n",b->s_name);  
      capa_msg(MESSAGE_ERROR,warn_msg);       capa_msg(MESSAGE_ERROR,warn_msg);
      return (a);       return (b);
    }     }
  } else {  /* a and b are neither identifiers */   } else {  /* a and b are neither identifiers */
   if( (a->s_type == I_VAR) ||    if( (a->s_type == I_VAR) ||
Line 1799  assign_id_list( s ) Symbol *s; Line 1802  assign_id_list( s ) Symbol *s;
   }    }
 }  }
   
 void assign_pts ( Symbol* coord1, Symbol* coord2, Symbol* num) {  /* void assign_pts ( Symbol* coord1, Symbol* coord2, Symbol* num) { */
   void assign_pts (coord1, coord2, num)Symbol *coord1;Symbol *coord2;Symbol *num;
   {
   PointsList_t *pt;    PointsList_t *pt;
   if( LastPtsList != NULL ) {    if( LastPtsList != NULL ) {
     LastPtsList->pts_next = gen_ptslist( coord1, coord2, num );      LastPtsList->pts_next = gen_ptslist( coord1, coord2, num );

Removed from v.1.6  
changed lines
  Added in v.1.9


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>