2023/02/02
ocamllex
やったこと
- タイガーブック、 lexer の実装
lexer の実装を始めた。
本では ML-Lex を使っているけど ocaml で書くので ocamllex を使う。
定義ファイル (.mll
) を書く時に参考になりそうな資料 ↓
- Chapter 17 Lexer and parser generators (ocamllex, ocamlyacc)
- Module Lexing
- プログラミング言語 8 字句解析器(lexer)と構文解析器(parser)
lex は正規表現で書かれた定義から字句解析器を生成してくれるけど、こういうツールみたいなものを書いていると学んでいる感じが無くて少し不安になる。
でもよく考えたら、字句解析をフルスクラッチで書くにしても正規表現を NFA で書いてから DFA に直して最小化したものをコードに落とすだけだから結構機械的な作業になるのか。
『コンパイラ 作りながら学ぶ』では勉強のための小さな処理系を書く感じだったけれど、タイガーブックでは本格的に言語を作ってる感じがあって楽しみになってきた。
ただタイガーブックは理論の解説は丁寧だが、実際にコンパイラの断片を作るプログラミング演習の説明が不親切なことと演習問題の答えが見つからないことがある。
OCaml で tiger 言語を作ってるリポジトリを見つけたので、だいぶ参考にさせてもらってる (できるだけ自力で作りたいけど、タイガーブックと配布されてる SML ファイルだけだと分からない部分が多い…)。
思ったこと
OCaml はファイル単位でモジュールになるからファイルの命名によく迷う。 ディレクトリ名とファイル名の意味が被ってしまって変な感じになる。 命名に迷うの Go でもたまにあるが、適切な分割やグルーピングができてない可能性もある気がする。
.mll
の formatter/linter ないかな…
今日の英会話
Esports が STEM 教育の準備に有効という話。