модуль RubyVM::AbstractSyntaxTree
AbstractSyntaxTree предоставляет методы для разбора кода Ruby в абстрактные синтаксические деревья. Узлы в дереве являются экземплярами RubyVM::AbstractSyntaxTree::Node.
Методы класса Public
static VALUE
rb_ast_s_of(VALUE module, VALUE body)
{
VALUE path, node, lines;
int node_id;
const rb_iseq_t *iseq = NULL;
if (rb_obj_is_proc(body)) {
iseq = vm_proc_iseq(body);
if (!rb_obj_is_iseq((VALUE)iseq)) {
iseq = NULL;
}
}
else {
iseq = rb_method_iseq(body);
}
if (!iseq) return Qnil;
path = rb_iseq_path(iseq);
node_id = iseq->body->location.node_id;
if (!NIL_P(lines = script_lines(path))) {
node = rb_ast_parse_array(lines);
}
else if (RSTRING_LEN(path) == 2 && memcmp(RSTRING_PTR(path), "-e", 2) == 0) {
node = rb_ast_parse_str(rb_e_script);
}
else {
node = rb_ast_parse_file(path);
}
return node_find(node, node_id);
} Возвращает узлы AST заданного proc или метода.
RubyVM::AbstractSyntaxTree.of(proc {1 + 2})
# => #<RubyVM::AbstractSyntaxTree::Node(NODE_SCOPE(0) 1:35, 1:42): >
def hello
puts "hello, world"
end
RubyVM::AbstractSyntaxTree.of(method(:hello))
# => #<RubyVM::AbstractSyntaxTree::Node(NODE_SCOPE(0) 1:0, 3:3): >
static VALUE
rb_ast_s_parse(VALUE module, VALUE str)
{
return rb_ast_parse_str(str);
} Разбирает заданную строку в абстрактное синтаксическое дерево, возвращая корневой узел этого дерева.
SyntaxError генерируется, если заданная строка имеет неверный синтаксис.
RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
# => #<RubyVM::AbstractSyntaxTree::Node(NODE_SCOPE(0) 1:0, 1:9): >
static VALUE
rb_ast_s_parse_file(VALUE module, VALUE path)
{
return rb_ast_parse_file(path);
} Читает файл из pathname, затем разбирает его так же, как ::parse, возвращая корневой узел абстрактного синтаксического дерева.
SyntaxError генерируется, если содержимое pathname не является корректным синтаксисом Ruby.
RubyVM::AbstractSyntaxTree.parse_file("my-app/app.rb")
# => #<RubyVM::AbstractSyntaxTree::Node(NODE_SCOPE(0) 1:0, 31:3): >
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.