Install Theme

Your web-browser is very outdated, and as such, this website may not display properly. Please consider upgrading to a modern, faster and more secure browser. Click here to do so.

タンブラー?

Big Sky

4月 20 '12

mruby(Lightweight Ruby) をプログラムに組み込んでみいる

たぶんこれからガチャガチャ変わるので参考にはならない。まぁネタなので。あと殆ど tools/mruby の下にある物と同じ。
またAPIとか整理されてないので、コンパイルにはソースディレクトリを参照に含めたりする必要がある。

#include <mruby.h>
#include <mruby/proc.h>
#include <compile.h>

int
main() {
  int n;
  mrb_state* mrb;
  struct mrb_parser_state* st;
  char* code =
“[1,2,3].each {|x| “ \
“  p x             “ \
”}                 “;

  mrb = mrb_open();
  st = mrb_parse_string(mrb, code);
  n = mrb_generate_code(mrb, st->tree);
  mrb_pool_close(st->pool);
  mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value());
}

/* vim:set et ts=2 sts=2 sw=2 tw=0: */
mrb_open() で状態遷移マシンを作り、文字列をパースして構文木を作る(mrb_parse_string())。yaccによるAST。その構文木からジャンプ命令等の実行コードを吐いて(mrb_generate_code())実行する(mrb_run())。
まぁ一般的名奴ですね。これからいろいろ出来る様になるんだろうけど、Lightweight を歌ってるのでどの辺が線引きなのか難しそう。


from Big Sky http://bit.ly/JcCmpK