MinRubyパーサの構文解析結果を眺める
minrubyをパース
minruby をインストール。
code:sh
gem install minruby
irbを起動して、minruby_parse で構文解析した結果を取得する
code:irb
$ irb -rminruby
irb(main):001:0> minruby_parse "10"
irb(main):002:0> minruby_parse "10 + 20"
リテラル
code:irb
irb(main):006:0> minruby_parse "10"
整数をプリント
code:irb
irb(main):001:0> minruby_parse "p 10"
こんな感じに出力できれば良い?
code:print_int.S
.text
.align 2
.globl _main
_main:
# 整数をプリント
bl _print_int
# 終了ステータスに0を返す
ret
code:libminruby.c
void print_int(int x) {
printf("%d\n", x);
}
ビルドして実行
code:sh
$ gcc foo.S libminruby.c
$ ./a.out
255
複数ステートメント
code:irb
irb(main):005:0> minruby_parse "p 10; p 20"
code:foo.S
.text
.align 2
.globl _main
_main:
# p 10
bl _print_int
# p 20
bl _print_int
# 終了ステータスに0を返す
ret
変数
code:irb
irb(main):001:0> minruby_parse "a = 255; p a"
code:variable.S
.text
.align 2
.globl _main
_main:
# a = 255
# print_int(a)
bl _print_int
# 終了ステータスに0を返す
ret
変数その2
code:irb
irb(main):002:0> minruby_parse "a = 10; b = 20; p a + b"
=>
["stmts",
code:variable2.c
// variable2.c
extern void print_int(int x);
int main() {
int a = 10;
int b = 20;
print_int(a + b);
}
code:variable2.S
.text
.align 2
.globl _main
_main:
# a = 10
# b = 20
# print_int(a + b)
add w8, w8, w9
bl _print_int
# 終了ステータスに0を返す
ret