[Rd] R_parseVector and syntax error [was: error messages while parsing with rniParse]
Romain Francois
romain.francois at dbmail.com
Fri Jun 19 08:17:05 CEST 2009
Duncan Murdoch wrote:
>
> Simon Urbanek wrote:
>> On Jun 18, 2009, at 17:02 , Duncan Murdoch wrote:
>>
>>> Romain Francois wrote:
>>>
>>>> Hello,
>>>>
>>>> [I'm redirecting this here from stats-rosuda-devel]
>>>>
>>>> When parsing R code through R_parseVector and the code generates
>>>> an error (syntax error), is there a way to grab the error.
>>>> It looks like yyerror populates the buffer "R_ParseErrorMsg", but
>>>> then the variable is not part of the public api.
>>>>
>>>> Would it be possible to add yet another entry point to the parser
>>>> that would basically wrap R_parseVector so that it would have an
>>>> extra char* argument that would bring back the error message if
>>>> there is an error?
>>>>
>>>>
>>>>
>>> I would oppose that. Suggest ways to reduce the complexity of the
>>> parser interface and I'd be interested. It's a nightmare to make
>>> any changes there.
>>>
>>> You can always call the R function wrapped in try(), so it's not as
>>> though this would give you anything that you don't already have
>>> access to.
>>>
>>
>>
>> I'm not quite following - we're talking about R_ParseVector in C
>> code so the point is that the C code gets access to the error
>> message so it can relay it to the user.
>
> I understood that. But the C code can get the error message by
> evaluating an R expression and looking at the result.
>
>> There are no R-level functions involved here. The issue here for the
>> moment is that this information is retrievable at R level but not
>> (officially) at the C level.
>
> I wouldn't mind exposing the underlying information in a clean way,
> but the string in R_ParseVector isn't all a front end should get.
Great. Let's do that.
Is a function that simply returns some of the static variables used by
bison clean enough ?
> At the time of an R_ParseVector syntax error, the parser knows what
> token it couldn't handle, and it knows its classification, and the
> location in the file where it came from. Not all of that makes it
> through to the error message.
>> As for reducing complexity - technically, there is no complexity
>> added since all this is already in place ... [adding extra char *
>> argument to ParseVector may not be the best way but that's not what
>> I'm arguing for].
>
> It was what I was arguing against.
>
> Duncan Murdoch
>
>> Or am I missing something?
>
>> Cheers,
>> S
>>
>>
>>
>>>> Romain
>>>>
>>>> Simon Urbanek wrote:
>>>>
>>>>
>>>>> On Jun 15, 2009, at 12:05 , Romain Francois wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> In JRI, is there a way to get the error message that is
>>>>>> generated by the
>>>>>> parser through rniParse
>>>>>> For example, if I have this :
>>>>>>
>>>>>> long y = re.rniParse( "rnorm( 10 ))", 1 ) ;
>>>>>>
>>>>>> this obviously generates a parse error, so y will be the same as
>>>>>> (R_NilValue) :
>>>>>>
>>>>>> long null_id = re.rniEval( re.rniParse( "NULL", 1 ), 0 ) ;
>>>>>>
>>>>>> I guess the underlying question is : "Is R_ParseErrorMsg exposed to
>>>>>> JRI".
>>>>>>
>>>>>>
>>>>> AFAICT R_ParseErrorMsg and friends are not exposed by the R API -
>>>>> they are not accessible outside, so they cannot be use by JRI. It
>>>>> would be nice if there was a way of accessing that info, but R
>>>>> doesn't currently support that.
>>>>>
>>>>> Cheers,
>>>>> Simon
>>>>>
>>>>>
>>>>>
>>>>>> The reason is I would like to bring back the message as part of an
>>>>>> exception generated when the code does not parse.
>>>>>>
>>>>>> Romain
>>>>>>
>>>>>>
>>>>
>>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>>
>
>
>
--
Romain Francois
Independent R Consultant
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
More information about the R-devel
mailing list