[Rd] Changes to parser in R-devel

Duncan Murdoch murdoch.duncan at gmail.com
Fri Jul 20 18:22:25 CEST 2012


On 19/07/2012 6:50 PM, Duncan Murdoch wrote:
> On 12-07-19 4:41 PM, Yihui Xie wrote:
> > I'm not sure if there is a bug somewhere; see this example:
>
> There's definitely a bug in the handling of empty lists, such as the
> empty list of commands in your first example and the empty list of
> arguments in your second.  There's a partial workaround currently in
> R-devel, but not a perfect fix.  (This is due to me missing a conversion
> from Romain's 0-based column counting to the usual 1-based counting.)
>
> I expect it will be fixed tomorrow, or sooner.

As far as I know, it is now fixed (in r59913).

Duncan Murdoch

>
> Duncan Murdoch
>
> >
> > getParseData(parse(text='function(x){}'))
> >
> >    line1 col1 line2 col2 id parent          token terminal     text
> > 1     1    1     1    8  1     11       FUNCTION     TRUE function
> > 2     1    9     1    9  2     11            '('     TRUE        (
> > 3     1   10     1   10  3      5 SYMBOL_FORMALS     TRUE        x
> > 4     1   11     1   11  4     11            ')'     TRUE        )
> > 5     1   12     1   12  6      8            '{'     TRUE        {
> > 6     1   13     1   13  7      8            '}'     TRUE        }
> > 7     1   12     1   12  5     11            '}'     TRUE        {
> > 8     1   12     1   13  8     11           expr    FALSE
> > 9     1    1     1   13 11      0           expr    FALSE
> >
> > I get an additional { in the 7th row of the 'text' column.
> >
> > Another problem is that for this empty function below, there will be
> > an obvious pause if you run it more than once:
> >
> > getParseData(parse(text='function(){}'))
> >
> > and you may get wild line/col numbers like this:
> >
> >     line1 col1     line2 col2 id parent    token terminal     text
> > 1      1    1         1    8  1      9 FUNCTION     TRUE function
> > 2      1    9         1    9  2      9      '('     TRUE        (
> > 3      1   10         1   10  3      9      ')'     TRUE        )
> > 4      1   11         1   11  4      6      '{'     TRUE        {
> > 5      1   12         1   12  5      6      '}'     TRUE        }
> > 6 320024   11 140106360   11 11      9      '}'     TRUE
> > 7      1   11         1   12  6      9     expr    FALSE
> > 8      1    1         1   12  9     11     expr    FALSE
> >
> > What is worse is it can crash R:
> >
> >   *** caught segfault ***
> > address 0x9488c20, cause 'memory not mapped'
> >
> > Traceback:
> >   1: parse(text = "function(){}")
> >   2: getSrcref(x)
> >   3: getSrcfile(x)
> >   4: getParseData(parse(text = "function(){}"))
> >
> >
> >> sessionInfo()
> > R Under development (unstable) (2012-07-18 r59904)
> > Platform: i686-pc-linux-gnu (32-bit)
> >
> > locale:
> >   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
> >   [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
> >   [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
> >   [7] LC_PAPER=C                 LC_NAME=C
> >   [9] LC_ADDRESS=C               LC_TELEPHONE=C
> > [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
> >
> > attached base packages:
> > [1] stats     graphics  grDevices utils     datasets  methods   base
> >
> >
> > Regards,
> > Yihui
> > --
> > Yihui Xie <xieyihui at gmail.com>
> > Phone: 515-294-2465 Web: http://yihui.name
> > Department of Statistics, Iowa State University
> > 2215 Snedecor Hall, Ames, IA
> >
> >
> > On Wed, Jul 18, 2012 at 2:31 PM, Duncan Murdoch
> > <murdoch.duncan at gmail.com> wrote:
> >> I have just committed (in r59883) some changes to the R parser based on
> >> Romain Francois' parser package.  Packages that made use of parser will
> >> hopefully find that the information in base R gives them what they need to
> >> work with, but the data is not identical to
> >> what parser recorded (since it was not consistent with some things already
> >> in R).  One reason for the change was that the parser in the parser package
> >> was slightly different than the one in R; the hope is that by providing the
> >> services in R, it will make maintenance easier for things like code
> >> analysis, pretty printing, etc.
> >>
> >> See ?getParseData for details, and if you are maintaining a package that
> >> depends on parser, feel free to ask me for help in the transition, or make
> >> suggestions for changes if I've done something that causes you too much
> >> trouble.
> >>
> >> Duncan Murdoch
> >>
> >> P.S. to Qiang Li:  as mentioned privately, the goal for this change was to
> >> reproduce output equivalent to what parser did, so I have not incorporated
> >> your suggested change to outlaw expressions like "x[[1] ]"  (with an
> >> embedded space where it shouldn't be).  After things settle down we can
> >> consider that change and others.
> >>
> >> ______________________________________________
> >> R-devel at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



More information about the R-devel mailing list