LoginSignup
2
7

More than 1 year has passed since last update.

JavaScriptで自作言語インタープリタの作り方

Last updated at Posted at 2022-10-10

自作言語やインタープリタの作り方の勉強。

書籍「GO言語でつくるインタプリタ」で紹介されている、Monkey言語のインタープリタを作成します。

6.png

著者がGOのコードを公開していますが、読者によって様々な言語に移植されています。
今回は読者のコードを参考にJavaScriptで書いてみました。(本はまだ買ってない)

インタープリタ = Lexer + Parser + Eval

機能 解説
Lexer ソースコードを先頭から1文字ずつ読み込んで、プログラムとしての最小単位(トークン)に分解する
Parser トークンを先頭から1個ずつ読み込んで、プログラムとして意味のある単位(ノード)に組み立てる。ノードにはがあり、1本のツリー(AST)を作る
Eval ASTを評価・実行する

※ASTはHTMLに例えるとDOMみたいなもの

インタープリタをコードで説明すると
function interpreter(code){
    const lexer = new Lexer(code)
    const ast   = new Parser(lexer).parse()
    return Eval(ast)
}

ソースコード

機能 依存関係 難易度
lexer.js token.js
parser.js lexer.js token.js ast.js ★★★
eval.js parser.js object.js functions.js ★★

実行環境

JavaScript製なのでWebで実行できます。
開発者ツールのコンソールを開けば、トークン列とASTの内容を確認できます。

学習メモ

ソースコードを読むだけで理解できるように、できるだけ平易に書いてますが、根本的にインタープリタは難しいので限界もあります。

Prattパーサーと呼ばれるParser部の難易度が高い。特にparseExpression()の所。
どういう関数がどういう順番で実行されるのかログを取ったり、ASTを確認したりして、時間を掛けて体で覚えていくのが良いかと。

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7