やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

組込ライブラリ(RubyVM::AbstractSyntaxTree::Node)

 構文木ノード。

成果物

情報源

RubyVM::AbstractSyntaxTree::Node

RubyVM::AbstractSyntaxTree.parse によって作られる抽象構文木を表すクラスです。

pp RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
# => (SCOPE@1:0-1:9
#     tbl: [:x]
#     args: nil
#     body:
#       (LASGN@1:0-1:9 :x
#          (OPCALL@1:4-1:9 (LIT@1:4-1:5 1) :+ (LIST@1:8-1:9 (LIT@1:8-1:9 2) nil))))

このクラスは MRI の実装の詳細を表します。

 MRIって何? ググったらCRubyなるものがヒット。

CRubyまたはMRI (Matz' Ruby Implementation[2]、Matz Ruby Interpreter[3]) は、まつもとゆきひろによって開発されたRubyのリファレンス実装である。

インスタンスメソッド

children first_column first_lineno inspect last_column last_lineno type
node = RubyVM::AbstractSyntaxTree.parse('1 + 2')
p node.children # => [[], nil, #<RubyVM::AbstractSyntaxTree::Node:OPCALL@1:0-1:5>]
p node.first_column # => 0
p node.first_lineno # => 1
puts node.inspect # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:5>
p node.last_column # => 5
p node.last_lineno # => 1
p node.type # => :SCOPE

所感

 ふつうは知らなくていいだろう。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux