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