Karim BELABAS on Sat, 14 Dec 2002 21:15:47 +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, 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.

A decent solution is to switch to GP2C's parser. Later...

Cheers,

    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/