TinyRubyコンパイラ/複文を実行する
#TinyRuby
from TinyRubyコンパイラ
これまでは1つの文しか実行できなかったので、複数の文を実行できるようにする。
構文木を確認
複文の構文木を確認する。
code:irb
irb(main):006:0> minruby_parse "p 10; p 20"
=> ["stmts", ["func_call", "p", "lit", 10], ["func_call", "p", "lit", 20]]
配列の0番目の要素(ノードの種類)
stmts
配列の1番目の要素
1番目の文
["func_call", "p", ["lit", 10]]
配列の2番目の要素
2番目の文
["func_call", "p", ["lit", 20]]
文が増えるごとに配列の要素が増えていく。
コンパイラへ複文を実装
code:diff
diff --git a/tinyrubyc.rb b/tinyrubyc.rb
index 9572132..8293432 100644
--- a/tinyrubyc.rb
+++ b/tinyrubyc.rb
@@ -49,6 +49,12 @@ def gen(node)
# 関数を呼び出す
puts " call #{node1}"
+ elsif node0 == "stmts"
+ # 文を要素として持つ配列を取得
+ stmts = node1..
+ stmts.each do |stmt|
+ gen(stmt)
+ end
end
end