Чтение , это и , которые дают мне некоторые идеи о различиях между деревом разбора и абстрактным синтаксическим деревом.
Тем не менее, я все еще немного озадачен тем, что конкретно это означает для 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
..
Заранее благодарим за освещение ..