100 likes | 222 Views
プログラミング言語クラス 2-7 言語処理系のソースコード. 稲葉 一浩. この時間にやること. 言語 処 理系のファイル構成の 紹介 主 に Ruby を中心に. Ruby 処理系のファイル構成. 最初に付いてくるもの バージョン管理システム( VCS )で管理 自動的に生成するもの 自動的に生成するものは原則、 VCS で管理しない configure 関連 パーサ関連 VM 関連. Ruby 処理系の作り方. configure; make all test install test-all TESTS=-v ソースコード生成ツールを利用
E N D
プログラミング言語クラス2-7 言語処理系のソースコード 稲葉 一浩
この時間にやること • 言語処理系のファイル構成の紹介 • 主に Ruby を中心に
Ruby処理系のファイル構成 • 最初に付いてくるもの • バージョン管理システム(VCS)で管理 • 自動的に生成するもの • 自動的に生成するものは原則、VCS で管理しない • configure 関連 • パーサ関連 • VM関連
Ruby処理系の作り方 • configure; make all test install test-all TESTS=-v • ソースコード生成ツールを利用 • パーサ関連: yacc(bison)、gperf • VM関連:rubyを利用
ディレクトリ構成 • ./ • *.c, *.h: ソースコード本体(C言語) • *.def: VM の命令定義(オリジナル言語(C+α)) • include/ • 一緒にインストールされるファイルが置いてある • 1.9 から、インストールする *.h が制限 なぜか? • enc/ • 文字列エンコーディング(文字コード)関連 • defs/, template/ • 自動生成で利用する定義ファイル、テンプレート • bcc32, cygwin, … • アーキテクチャ依存ファイル • missing/ • OSなど環境によってあったりなかったりする関数の定義
ディレクトリ構成 • bin/, man/, lib/ • インストールされる実行ファイル、man、ライブラリ • ext/ • インストールされる標準添付ライブラリ(C) • sample/, doc/ • サンプルスクリプトとドキュメント • sample/test.rb: まつもとさん用の伝統的なテスト • test/, booststraptest/, benchmark/ • テスト、基礎的なテスト(何が違うか?)、ベンチマーク • tool/ • ビルドなどで利用するスクリプトなど
ファイル構成 • コア部分 • parse.y: 構文解析 • compile.c, iseq.c: コンパイラ • vm*.c: VM • gc.c: メモリ、オブジェクト管理(GC) • object.c: オブジェクト管理 • … • 組込クラス、メソッド部分 • string.c • array.c • time.c • … • prelude.rb • 実行時に読み込まれる初期化スクリプト(なぜ必要か?) YARV と言われている 部分はごく一部 ソースコード的には この部分が一番多い
おさらい:言語処理系の構成 • 字句解析 • 構文解析 • 意味解析 • コンパイル • 実行 最適化
Rubyのコア部分 gperf lex.c (予約語判定) defs/keywords bison parse.c (字句&構文&構文解析) parse.y node.hnode.c (構文木) compile.c(コンパイラ, 最適化) iseq.hiseq.c (YARV命令列) insns.def defs/opt_operand.def … vm_*.c (実行) ruby #include “vm.inc” …
自動生成されるファイル • *.inc • insns.def などから Rubyスクリプトで生成したC言語ソース • VM関連定義ファイル • どこかから #include して利用 • VM関連の操作は機械的に可能なものが多いため • 自動的に最適化するため • parse.c • parse.yから生成(bison) • prelude.c • prelude.rbから生成