[Rd] should the text for RIGHT_ASSIGN be -> in getParseData()?

Duncan Murdoch murdoch.duncan at gmail.com
Fri Jul 5 13:57:35 CEST 2013


On 13-07-05 7:40 AM, peter dalgaard wrote:
>
> On Jul 5, 2013, at 13:29 , Duncan Murdoch wrote:
>
>> On 13-07-05 3:31 AM, Yihui Xie wrote:
>>> Hi,
>>>
>>> The text column for '->' becomes '<-' in the data frame returned by
>>> getParseData():
>>>
>>>> getParseData(parse(text='1->x'))
>>>    line1 col1 line2 col2 id parent        token terminal text
>>> 7     1    1     1    4  7      0         expr    FALSE
>>> 1     1    1     1    1  1      2    NUM_CONST     TRUE    1
>>> 2     1    1     1    1  2      7         expr    FALSE
>>> 3     1    2     1    3  3      7 RIGHT_ASSIGN     TRUE   <-
>>> 4     1    4     1    4  4      6       SYMBOL     TRUE    x
>>> 6     1    4     1    4  6      7         expr    FALSE
>>>
>>> Is that expected?
>>
>> It's by design, but I agree it's not ideal.  The reason for it is that "1 -> x" is parsed as `<-`(x, 1).  I think the parser only does translations like this for -> and ->>.  Currently the parser shows the name of the binary operator as the text.
>>
>> I'll look into adding special handling for translations like this.  We will still parse the assignment in the same way, but the getParseData text could be the true text.
>
> Just watch out for potential complications, e.g.
>
>> `->`(x,1)
> Error: could not find function "->"
>
> so one needs to be sure that nothing will assume that the text column is a function name.
>

R itself doesn't make use of the text column, it's for display of code 
by highlighters etc.  So if anyone does assume text is a function name, 
it's their bug, not ours.  In fact, the bug is already there, because 
there is actually one other example which was being parsed properly, 
"**" is translated to "^".  There's no `**` function, but 2**3 works.

Duncan Murdoch

Duncan



More information about the R-devel mailing list