プログラミング言語を作りたい


このサイトは、独自記法で記事を書けるようになっています。その開発過程で、パーサー的なものを初めて作りました。その延長で、プログラミング言語のパーサーに興味が湧いたため、プログラミング言語の作り方の勉強をはじめました。(昨日始めたのですが、このサイトにブログ機能を作ったのが今日で、昨日の日付の記事を書く機能が無いので今日のエントリーになっています)

理想的には自分の開発で使えるような言語ができれば嬉しいなと思いますし、そこまで行かなくても、簡単な数式を処理くらいができると便利なシーンもありそうです。これまで、自分の言語を作っても、エディタがないと結局不便だなとも思っていたのですが、CodeMirror を使えば簡単に使えそうなエディタも作れそうなため、俄然興味が湧いている感じです。いい感じの言語ができたら、VS Code のエクステンションも良さげです。

さて、夢はこの辺として、とりあえず、Amazon で以下の本を 2 冊買い込みました。

両方をちょっと読み進めたのでメモ

2 週間でできる ! スクリプト言語の作り方

yacc と lex を使って、C 言語でプログラミング言語を作ってく本みたいです。著者の車輪の再発明大歓迎という感じがとても好感持てます。

yacc と lex は、Windows でやるのであれば、bison と flex というフリーソフトを使うと良いらしいです。ただ、Cygwin がいるようなので、試してみるのは後日。( 参考 :bison と flex に関する記事 )

字句解析や構文解析は、ツールを使わない実装法も紹介されていました。構文解析は、実装の簡単な LL 構文解析らしいです。

プログラミング言語を作る

Java を使って、プログラミング言語を作っていく本みたいです。字句解析は、Java の正規表現を使って、構文解析は独自のライブラリを使っていました。その独自ライブラリについても、本の後半で解説されていました。LL 構文解析 + αの手法らしいですが、この辺りはもっと勉強しないとよくわかりません。

わかったこと

  • 字句解析は自前で作っても行けそう
  • 構文解析は、LL 構文解析なら実装が簡単。yacc では LALR 法ベースになるらしい。

字句解析は適当に自前で作ってみても良さげです。構文解析もプログラミング言語を作るの方で紹介されているもので十分らしいです。また、LR(1) パーサジェネレータを自作して構文解析をするというサイトも見つけたので、そちらも読んでみようかと思います。