Re: [Rd] [R] Continuation and parse

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Thu 20 Jul 2006 - 16:16:25 GMT

The issue here is that the current expression is still there and protected if there is a parse problem. So you need one more unprotect.

This does not give a problem in source() (the only internal use) as it throws an error in those cases. (It also uses a different branch of the code with n < 0.)

Since this seems to be worrying no one else, I am going to add the unprotect in the source code for R-devel.

On Thu, 13 Jul 2006, Martin Morgan wrote:

> [this is from R-help, at the end of June]
>
> Jim Lemon asked about parsing syntactically incorrect versus
> incomplete lines, generating a couple of responses.
>
> Philippe's suggestion isn't robust (e.g., "\nls)". Prof. Ripley's
> comment lead me to R_ParseVector (the only exposed parse
> routine). Unfortunately, this returns from parsing incomplete or
> syntactically incorrect text with a PROTECT stack imbalance, so there
> is no natural way to return from a .Call.
>
> What I'd like is to have access to multiline console input after
> parsing but before evaluation, or to return from a .Call like that
> below with either the parsed expression or information about the
> reason for failure. Any suggestions?
>
> Thanks in advance,
>
> Martin
>
> SEXP parses(SEXP cmd) {
> ParseStatus status;
> SEXP res;
> res = R_ParseVector(cmd, 1, &status);
> return res;
> }
>
> /* > .Call("parses", "ls(") */
> /* 25 SEXP res = R_ParseVector(cmd, 1, &status); */
> /* (gdb) p R_PPStackTop */
> /* $1 = 3 */
> /* (gdb) next */
> /* 26 return res; */
> /* (gdb) p R_PPStackTop */
> /* $2 = 5 */
>
> R version 2.4.0 Under development (unstable) (2006-07-11 r38560)
> x86_64-unknown-linux-gnu
>
> Philippe Grosjean <phgrosjean@sciviews.org> writes:
>
> > Well, you haven't used the search engines with the right key: the magic
> > words are:
> >
> > > RSiteSearch("incomplete line")
> >
> > With the first document being my query (almost two years ago), and the
> > second one being Peter Dalgaard answer. You must adapt it to cope with
> > internationalization, but basically, you could use something like:
> >
> > > grep("\n2:",try(parse(textConnection("ls)")), silent = TRUE))
> > numeric(0)
> > > grep("\n2:",try(parse(textConnection("ls(")), silent = TRUE))
> > [1] 1
>
> From: Prof Brian Ripley <ripley>
> Date: Wed, 28 Jun 2006 13:44:49 +0100 (BST)
>
> On Wed, 28 Jun 2006, Jim Lemon wrote:
>
> > Hi gurus,
> >
> > After an unsuccessful scrabble through the documentation and Jon's
> > excellent search facility, I am no wiser as to how R recognizes an
> > incomplete command line and politely raises its hand for more. The help
> > page for parse gives no indication that it does anything more than spit
> > the dummy when fed an incomplete command line, but something in there
> > must recognize such ellipsis. Any hints?
>
> It's internal. Look in src/main/main.c, in particular the R_Repl*
> functions. In short, R_Parse1Buffer can return PARSE_INCOMPLETE.
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Fri Jul 21 02:31:40 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Thu 20 Jul 2006 - 20:31:46 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.