From simon.urbanek at r-project.org  Tue Nov  8 21:18:48 2011
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Tue, 8 Nov 2011 15:18:48 -0500
Subject: [Rd] Question on parsing R code from C
In-Reply-To: <loom.20111108T203022-872@post.gmane.org>
References: <loom.20111108T203022-872@post.gmane.org>
Message-ID: <9465BE63-EA88-4BE2-8D1C-9E33BE8AA45D@r-project.org>


On Nov 8, 2011, at 2:42 PM, KR wrote:

> Hi all,
> 
> I am facing the necessity to parse R code from C-side. As a first approximation 
> the goal would be a re-implementation of the R shell (not Rgui).
> 
> I read the document at http://cran.r-project.org/doc/manuals/R-exts.html section 
> 5.12, and the related source code example. 
> 
> I have some questions:
> 
> 1. I need to declare the types and function signatures that I am going to use 
> for this task without having to actually include the R headers. Can I safely 
> declare SEXP according to the following ?
> typedef struct SEXP *unknwn_handle;

I'm not sure I understand this really - it doesn't define SEXP. I would expect something like

typedef void *SEXP;

Which may work for declarations. Note, however, that for the actual code you'll need to include the headers anyway.


> More in general, is there a reference document for the C API (listing function 
> signatures, and type definitions) ?
> 

http://r.research.att.com/man/R-exts.html is the documentation and the headers (Rinternals.h mainly) is the canonical reference.


> 2. If the parsed R code of the working implementation contain commands like 
> plot(), will the opportune windows pop-up as if I were using the R shell (on 
> both windows and unix systems) ?
> 

It depends on your settings - plot() uses whatever graphics device you tell it to use, so plot() doesn't decide about that. If you use the proper interactive graphics device *and* make sure you're serving the REPL then it may work. Beware of interactions with your other parts, though, since you are responsible for ensuring that it works. 


> 3. What initialization do I need to perform to be in exactly the same starting 
> state as if I had executed the R shell with the --vanilla option?
> 

It depends on the OS and the way you are initializing R. In the simple case pass the "--vanilla" as the argument when initializing R. Please read the section about embedding, it has examples. Also see the other R GUIs to understand the complexities involved.

BTW: you subject has absolutely nothing to do with your question - your'e asking about embedding R ;)

Cheers,
Simon



> 
> Any help or feedback is appreciated.
> 
> Thank you.
> 
> Kind regard
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 



[Rd] Question on parsing R code from C
Simon Urbanek