Karim BELABAS on Sun, 15 Dec 2002 13:35:14 +0100 (MET)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: gp: eval(Str("A"(-1)"B"))


On Sat, 14 Dec 2002, Ilya Zakharevich wrote:
> On Sat, Dec 14, 2002 at 09:15:47PM +0100, Karim BELABAS wrote:
> > On Sat, 14 Dec 2002, Michael Somos wrote:
> > >     For my own information I would like to know why the difference:
> > >
> > > ? eval(Str("A"(1)"B"))
> > > %1 = A1B
> > > ? eval(Str("A"(-1)"B"))
> > > %2 = A - 1
> >
> > I see no problem with eval("A1B") --> A1B
> >
> > eval("A-1B") should trigger a syntax error, namely
> >   ***   unused characters: A-1B
> >                               ^-
> > Unfortunately, 'eval' simply calls 'flisseq', which reads as many characters
> > as will constitute a valid 'seq' and returns the result. This is needed for
> > things like
> >
> >   for (i=1,n,blah); \\ lisseq is called with argument  "blah);"
> >
> > In order to trigger the expected error with the current parser, I would have
> > to move eval() to anal.c and have it include a copy of lisseq0. Don't really
> > want to do it. Other solution: parse eval's argument before calling the
> > interpreter (which will reparse it) --> slowdown; not good.
>
> Why?  Just check that analyseur is at the end of the string...

That requires either creating a modified copy of lisseq0 or adding a flag to
lisseq0 [check analyseur at end]. Because when lisseq returns, 'analyseur' is
restored... And of course, I can't check all the time because of the 'blah);'
example above.

It would just be yet another hack on top of a huge list. I'd rather wait till
the parser is replaced.

    Karim.
-- 
Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathématiques, Bât. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas/
--
PARI/GP Home Page: http://www.parigp-home.de/