Compiler

Overview

mrbgems/mruby-compiler/, mrbgems/mruby-bin-mrbc/ あたりにあるコードを対象に記述します。

Details

キーワードのマッチング

  • gperf に基づいたハッシュ関数を元にキーワードのマッチングを行います
  • keywords が入力となるキーワード定義、 lex.def がそれを gperf に食わせた結果の出力ファイルのようです。

mrb_lex_state_enum

  • 構文解析器で使う状態を示すための enum 値
    • TODO: 詳細を書く

AST

  • node_type に AST の各ノードのタイプが記載されている

APIs

パース処理

mrb_parser_dump()

  • メインのパース処理

コード生成

mrb_generate_code()

  • 引数に渡した parser_state を元にコード生成を行い、 RProc* を返す。
  • C 実装で mruby スクリプトの文字列をパースしてコード生成する人にはお馴染みかも。

Others

mrbc

  • mruby スクリプトの .mrb バイトコードを生成するための実行ファイル。
  • mrbgems/mruby-bin-mrbc/ にコードが存在

mrbc_context

  • mruby コンパイラのコンテキスト情報を保持する
  • ファイル名とかシンボル名とか