This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] New testcase to evaluate Fortran substring expression
On Thu, 14 Jul 2005, Daniel Jacobowitz wrote:
> 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.
I ever tried to use NULL, but it can't distinguish between ":exp" and
"exp:". But I am thinking of adding one longcst into operator
OP_F90_RANGE to indicate the range type, 0 refer to ":", 1 refer to
"exp:", "-1" means ":exp" and 2 means "exp:exp". Or add two boolean
to indicate whether that bound is empty or not. What is your point on
this. I will try to do some tests soon.
> > ! arglist : subrange
> > ! { }
> > ;
> >
>
> IIRC empty actions can just be skipped.
Do you means that I need to delete this empty action? I see others keep
this. So I did this too.
> > ! 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?
They are not valid expression for multi-dimensional array. I guess it is
might be the fault of the original author. This grammar was adapted from
the C parser. (You have a look at the header of f-exp.y for proof). In C
parser, it is just used to expression Function argments list. But in
fortran, things are somewhat complicated: parentheses are also express
array subscript, substring and also array section (the latter is the F90
extension). I guess the case is that the original author just add
substring as a valid arglist and didn't notice that it might interpret
"1:1,1", "1:1,1,1" and such as valid too.
>
> The new grammar is:
> arglist : /* empty */
> | exp
> | subrange
> | arglist ',' arglist
My intention is to use this to allow such things like "1:3, 2", "1:3, 2,
2:5" and so on. It is somewhat awesome to have to use "1:3, 2:2" or
"1:3, 2:2, 2:5".
>
> 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:
Yes, I ever had some thought about that. If you really care, I can
drop my grammar, and accept yours.
>
> arglist : /* empty */
> | exp
> | subrange
> | arglist ',' exp
> | arglist ',' subrange
>
Thanks very much for your kind comments.
Regards
- Wu Zhou