TinyRubyコンパイラ/MinRubyパーサの構文解析結果
from TinyRubyコンパイラ
TinyRubyコンパイラは構文解析器にMinRubyのパーサを利用する。
TinyRubyは以下の構文をサポートするので、それぞれの構文のMinRubyパーサでの構文解析結果を確認する。
整数リテラル
四則演算
複文
変数代入
変数参照
比較演算
条件分岐
関数呼び出し
関数定義
事前準備
MinRubyのパーサを利用できるよう、minruby gem をインストール。
code:sh
gem install minruby
irbを起動して、minruby_parse で構文解析した結果を取得してみる。
code:irb
$ irb -rminruby
irb(main):001:0> minruby_parse "10"
=> "lit", 10
irb(main):002:0> minruby_parse "10 + 20"
=> "lit", 10, "lit", 20
整数リテラル
code:irb
irb(main):001:0> minruby_parse "10"
=> "lit", 10
関数呼び出し
code:irb
irb(main):002:0> minruby_parse "p 10"
=> ["func_call", "p", "lit", 10]
四則演算
code:irb
irb(main):003:0> minruby_parse "10 + 20"
=> "lit", 10, "lit", 20
複文
code:irb
irb(main):004:0> minruby_parse "p 10; p 20"
=> ["stmts", ["func_call", "p", "lit", 10], ["func_call", "p", "lit", 20]]
変数代入
code:irb
irb(main):005:0> minruby_parse "a = 10"
=> ["var_assign", "a", "lit", 10]
変数参照
code:irb
irb(main):007:0> minruby_parse "a = 10; a"
=> ["stmts", ["var_assign", "a", "lit", 10], "var_ref", "a"]
比較演算
code:irb
irb(main):013:0> minruby_parse "1 < 2"
=> "lit", 1, "lit", 2
条件分岐
code:irb
irb(main):014:0> minruby_parse "if 2 > 1 then 10 else 20 end"
=> ["if", "lit", 2, "lit", 1, "lit", 10, "lit", 20]
関数定義
code:irb
irb(main):017:0> minruby_parse "def plus(a, b) a + b end"
=> ["func_def", "plus", "a", "b", "var_ref", "a", "var_ref", "b"]