Scheme で CASLⅡ パーサを書いてみた

情報処理技術者試験では得意とするプログラミング言語によって選択できる問題があるが、具体的なアーキテクチャに依存しない中立なものとして仮想機械 COMET のアセンブリ言語 CASLⅡ を選択することが出来る。 この言語はその仕様の全てが設問と共に与えられるので言語仕様を覚えているかどうかで躓いたりすることはない。

さて、 CASLⅡ の背景はともかくとして、その CASLⅡ のパーサを Scheme (R7RS) で書いてみた。

https://gist.github.com/SaitoAtsushi/e5e34139b1daac6dc1ba

Gauche の parser.peg がたいへん使い易かったのでその考え方を真似ている。 CASLⅡ パーサを記述するのに必要だと思った語彙をその都度に作るという手順で書いたので必要最小限で汎用性に欠けるものの、こういうまとめかたをすると CASLⅡ の定義をそのまま宣言的に記述できるのが良い。

LISP 系言語では DSL 的なものを書き易いというのが実感できた試みであった。

Document ID: f6cd36b75bffe28ba5b9c03e419bd314