「プログラミング言語の基礎概念」演習システムのための Syntax Highlighting

Vim で「プログラミング言語の基礎概念」の演習システムの導出を記述するための syntax highlighting である vim-copl を公開しました.

演習システムについて

「プログラミング言語の基礎概念」はプログラミング言語の意味論や型システムについて説明している書籍です. この書籍はオンラインの演習システムも併せて公開されており, 演習問題を実際に解いて導出を入力し, 正しい導出を記述しているか自動採点することができます.

この演習システムでは回答を入力する際に, 導出を独自の ASCII 表記で入力します. 判断 $latex \mathcal{J}$ の ASCII 表記を $latex \mathcal{J}^{\flat}$ とすると, 導出

$latex \mathcal{D} \equiv \cfrac{\mathcal{D}_1 \cdots \mathcal{D}_n}{\mathcal{J}_0} \textsc{ RuleName}$

の ASCII 表記は

$latex \mathcal{J}_0^{\flat} \texttt{ by RuleName} \{\\
\mathcal{D}_1^{\flat} \texttt{;} \\
\mathcal{D}_{n-1}^{\flat} \texttt{;} \\
\mathcal{D}_n^{\flat} \\
\}$

となります.

最初の方の問題は導出のサイズがあまり大きくないため, それほど苦労しないのですが, ある程度進んでくるとそれなりに大きな導出を書く必要があるため, なかなか苦労します. 以下はある問題の導出の例:

大きい導出木の例

vim-copl

vim-copl は, Vim でこの演習システムの導出を記述するための, syntax hilighting です. dein.vim や neobundle.vim のようなパッケージマネージャを使うと簡単にインストール出来ます. (ファイル数は少ないので手動でも十分インストール出来ます.)

" dein.vim
call dein#add('ymyzk/vim-copl')
" neobundle.vim
NeoBundle 'ymyzk/vim-copl'

ファイルの拡張子を .copl とすると, この演習システム用のファイルと認識され, syntax highlighting が適用されます. 使用例を以下に示します.

vim-copl 使用例

OCaml の syntax highlighting を参考にしています.

最後に

vim-copl の開発を行いながら実際に全ての演習問題を解いてみました. 複雑な導出の問題を解くために, 自分でプログラムを書いて問題を解く人も多くいるようですが,  syntax hilighting があれば, 手動でも十分に問題を解けると感じました.

バグ等の指摘は大歓迎です. ソースコードは MIT ライセンスで公開しています. vim-copl のコードをもとに, ライセンスの範囲内で, 他のエディタ向けに同様のものを作成していただいて構いません.