В чем разница между абстрактным синтаксическим деревом (как указано в pryr :: ast) и выводом as.list (quote (expr))? - PullRequest
0 голосов
/ 01 мая 2019

Чтение , это и , которые дают мне некоторые идеи о различиях между деревом разбора и абстрактным синтаксическим деревом.

Тем не менее, я все еще немного озадачен тем, что конкретно это означает для R и выводов pryr::ast, quote и substitute.

Рассмотрим следующий пример:

pryr::ast() возвращает абстрактное синтаксическое дерево (AST) (согласно документам: ?pryr::ast):

pryr::ast(z <- x + y)
\- ()
  \- `<-
  \- `z
  \- ()
    \- `+
    \- `x
    \- `y

При вызове as.list(quote() с тем же выражением я получаю:

as.list(quote(z <- x + y))
[[1]]
`<-`

[[2]]
z

[[3]]
x + y

Этот вывод также считается AST ? Или это слишком расплывчато, чтобы быть АСТ? Или это дерево разбора ?


С другой стороны susbtitute возвращает дерево разбора (согласно документам: ?substitute):

as.list(substitute(z <- x + y, list(x = 1)))
[[1]]
`<-`

[[2]]
z

[[3]]
1 + y

.. который отличается от подставленного x так же, как вывод из цитаты ..

Так что же, это дерево разбора? И является ли разница между деревом разбора и AST только подставленным x или чем-то еще?

Еще хуже, если рассматривать пример из принятого ответа здесь Я думаю, что дерево разбора должно быть более точным, чем AST , но при взгляде на вывод от pryr::ast и quote Я вижу совсем наоборот, то есть вывод от pryr::ast более точный, чем от quote ..

Заранее благодарим за освещение ..

...