インタプリタの実現方法

興味のある人がどれだけいるのかわかりませんが実行手順の概略です。
newt は以下の手順(3ステップ)で実行されています。

  1. ソースコード –(構文解析)–>構文木 –(BCジェネレータ)–> バイトコード –(VM)–> 実行

※字句解析には lex、構文解析には yacc を使用

[参考]

– オリジナル Newton の場合

  1. ソースコード –(NTK)–> バイトコード
  2. バイトコード –(Newton)–> 実行

※ バイトコードはパッケージの形で存在しました
※ デバッグ用のインスペクタではソースコードからバイトコードを生成して直接実行することもできました

– ruby の場合

  1. ソースコード –(構文解析)–> 構文木 –(eval)–> 実行

※ 字句解析はC言語、構文解析には yacc を使用
※ ruby2(Rite) ではバイトコードを採用するらしい

– java の場合

  1. ソースコード –(Javaコンパイラ)–> バイトコード
  2. バイトコード –(Java VM)–> 実行

※ ruby や java について間違いがあればご指摘下さい

Tags:

Leave a Reply