Да! Фактически он отправляет весь компилятор в stdlib. Таким образом, мы можем просто получить доступ к парсеру, чтобы получить AST:
require "compiler/crystal/syntax/*"
root = Crystal::Parser.new(%(
class Foo
def hello
:world
end
end)).parse
Официальные документы не включают Crystal::ASTNode
и его подклассы, те, которые вы находите, являются документами, раскрывающими язык макросов и, таким образом, немного отличаются. Так что вам придется погрузиться в исходный код, чтобы увидеть, как использовать AST.