From ripley at stats.ox.ac.uk  Thu Jul 20 18:16:25 2006
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu, 20 Jul 2006 17:16:25 +0100 (BST)
Subject: [Rd] [R] Continuation and parse
In-Reply-To: <6phlkqw3i8b.fsf@gopher1.fhcrc.org>
References: <44A32C5B.3030409@bitwrit.com.au> <44A282F7.8070901@sciviews.org>
	<6phlkqw3i8b.fsf@gopher1.fhcrc.org>
Message-ID: <Pine.LNX.4.64.0607201615150.32007@gannet.stats.ox.ac.uk>

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 at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 

-- 
Brian D. Ripley,                  ripley at 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



[Rd] [R] Continuation and parse
Prof Brian Ripley