1 / 10

プログラミング言語クラス 2-7 言語処理系のソースコード

プログラミング言語クラス 2-7 言語処理系のソースコード. 稲葉 一浩. この時間にやること. 言語 処 理系のファイル構成の 紹介 主 に Ruby を中心に. Ruby 処理系のファイル構成. 最初に付いてくるもの バージョン管理システム( VCS )で管理 自動的に生成するもの 自動的に生成するものは原則、 VCS で管理しない configure 関連 パーサ関連 VM 関連. Ruby 処理系の作り方. configure; make all test install test-all TESTS=-v ソースコード生成ツールを利用

alyson
Download Presentation

プログラミング言語クラス 2-7 言語処理系のソースコード

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プログラミング言語クラス2-7 言語処理系のソースコード 稲葉 一浩

  2. この時間にやること • 言語処理系のファイル構成の紹介 • 主に Ruby を中心に

  3. Ruby処理系のファイル構成 • 最初に付いてくるもの • バージョン管理システム(VCS)で管理 • 自動的に生成するもの • 自動的に生成するものは原則、VCS で管理しない • configure 関連 • パーサ関連 • VM関連

  4. Ruby処理系の作り方 • configure; make all test install test-all TESTS=-v • ソースコード生成ツールを利用 • パーサ関連: yacc(bison)、gperf • VM関連:rubyを利用

  5. ディレクトリ構成 • ./ • *.c, *.h: ソースコード本体(C言語) • *.def: VM の命令定義(オリジナル言語(C+α)) • include/ • 一緒にインストールされるファイルが置いてある • 1.9 から、インストールする *.h が制限 なぜか? • enc/ • 文字列エンコーディング(文字コード)関連 • defs/, template/ • 自動生成で利用する定義ファイル、テンプレート • bcc32, cygwin, … • アーキテクチャ依存ファイル • missing/ • OSなど環境によってあったりなかったりする関数の定義

  6. ディレクトリ構成 • bin/, man/, lib/ • インストールされる実行ファイル、man、ライブラリ • ext/ • インストールされる標準添付ライブラリ(C) • sample/, doc/ • サンプルスクリプトとドキュメント • sample/test.rb: まつもとさん用の伝統的なテスト • test/, booststraptest/, benchmark/ • テスト、基礎的なテスト(何が違うか?)、ベンチマーク • tool/ • ビルドなどで利用するスクリプトなど

  7. ファイル構成 • コア部分 • parse.y: 構文解析 • compile.c, iseq.c: コンパイラ • vm*.c: VM • gc.c: メモリ、オブジェクト管理(GC) • object.c: オブジェクト管理 • … • 組込クラス、メソッド部分 • string.c • array.c • time.c • … • prelude.rb • 実行時に読み込まれる初期化スクリプト(なぜ必要か?) YARV と言われている 部分はごく一部 ソースコード的には この部分が一番多い

  8. おさらい:言語処理系の構成 • 字句解析 • 構文解析 • 意味解析 • コンパイル • 実行 最適化

  9. 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” …

  10. 自動生成されるファイル • *.inc • insns.def などから Rubyスクリプトで生成したC言語ソース • VM関連定義ファイル • どこかから #include して利用 • VM関連の操作は機械的に可能なものが多いため • 自動的に最適化するため • parse.c • parse.yから生成(bison) • prelude.c • prelude.rbから生成

More Related