自作javascriptエンジンの内部構造を解説してみる

目次

  1. この記事の内容
  2. エンジン内部
    1. ファイルを読み込む
    2. 字句解析
    3. 構文解析
    4. クロージャ変換とか
    5. コード生成
    6. JIT
  3. 参考資料とか

この記事の内容

こんにちは、uint256_tです。

この記事では、今私が製作中のJavaScriptエンジンの内部構造をできるだけ細かく解説していきます。 この記事を通して、言語処理系の中身をあまり知らない人にその面白さを知ってもらえれば嬉しいし、また、私の実装に無駄な部分やこう改善すればいいんじゃないか?などあればTwitterとかで教えてもらえるとありがたいです。

エンジン内部

ファイルを読み込む

一つのセクションを用意する必要があるのか謎ですが、一応少しだけ解説します。

現在の実装では、ファイルを一度すべて読み込んでから処理しています。これには特に意味はなく、字句解析をするのと並行してファイルを読み込んでいったほうがメモリの消費も抑えられるので良いと思います。(ただ実装が面倒だっただけ)

あとは、ファイルを開けなかった時などのエラー処理を丁寧に作っておくと、誰かが自分の処理系を使ってみようとした時に変な罠に引っかからずに済むので良いと思います。

字句解析

ここでは、ソースコードを意味のある最小単位であるトークンに分解します。

上の画像で、トークンに付いている色はトークンの種類を表しています。実際に実装するときも、トークンにはトークン自身の種類についての情報を持たせることが多いです。(他にも色々持たせるさせることが多いです. トークンのある行とか)

今のところ、私のエンジンでは以下のようにトークンを表現しています。kindがトークンの種類を表していて、posがトークンの開始位置がファイルの先頭から数えてどの位置なのかを表しています。

Written on September 20, 2018