This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] New testcase to evaluate Fortran substring expression


On Fri, Jul 08, 2005 at 12:54:21AM +0800, Wu Zhou wrote:
> The original thought of mine is to not add any new operators.  The problem 
> of this idea is how to transfer the lowerbound (or upperbound or both) of 
> the prefixed array expression?  Any ideas on this?  
> 
> Now I coded a patch (attached below) to add four new operators for F90 
> subrange: OP_F90_RANGE_NORMAL, OP_F90_RANGE_DFT_END, OP_F90_RANGE_DFT_START
> and OP_F90_RANGE_DFT_ALL.  The code of evaluating sub-array is also added 
> and the code of substring evaluation is updated to use the former 
> (sub-array evaluation).  Would you please comment on this patch? 

First of all, why do you need four operators?  I'd just use one, and
push some sentinel value for the empty boundary case.  I'm not sure if
you can use NULL in this context, but if you can, that'd work nicely.

> ! arglist :      subrange
> !                         { }
>   	;
>      

IIRC empty actions can just be skipped.

> ! arglist	:	arglist ',' arglist %prec ABOVE_COMMA
>   			{ arglist_len++; }
>   	;
>   

The old grammar was:
   arglist: /* empty */
            | exp
            | substring
            | arglist ',' exp
   substring: exp ':' exp

So "1, 1" "1:1", "1:1,1", "1:1,1,1" were all valid arglists.  I don't
know Fortran, but I'm guessing this is intended, for multidimensional
arrays?

The new grammar is:
  arglist : /* empty */
            | exp
            | subrange
            | arglist ',' arglist

  subrange : exp ':' exp
             | exp ':'
             | ':' exp
             | ':'

One big problem here: I would have assumed bison would have bumped up
the number of conflicts reported here.  Maybe it doesn't because of the
%prec.  But you probaby don't want arglist ',' arglist.  It has all
sorts of quirks; for instance, it allows "," as an arglist with two
elements.  If what you are trying to do is allow "1:1, 1:1" then you
want:

  arglist : /* empty */
            | exp
            | subrange
            | arglist ',' exp
            | arglist ',' subrange


-- 
Daniel Jacobowitz
CodeSourcery, LLC


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]