簡単な言語の作り方-まとめ-

DLRを使って四則演算ができる言語を数回に渡って作成しました。この中で利用したDLRのAPIなどを簡単にまとめたいと思います。大きくは、以下の2種類になります。

  1. 言語の実装(言語の規則など)
  2. インタラクティブシェル

言語そのものを作成するには、以下のようなクラスを作成しました。

  1. LanguageContextクラス
    LanguageContextを継承したクラスであり、独自の言語の振る舞いやバージョン情報を定義する。ParseSourceCodeメソッドに独自の規則を実装する。
  2. パーサーやスキャナなど
    LanguageContext.ParseSourceCodeメソッドで使用する言語そのものの振る舞いを定義したクラスであり、この実装の結果としてDLRのASTへマップしたCodeBlockを戻り値にします。
    例えば、対話入力は結果を必ず表示するといったことも言語の振る舞いの1つです。

独自の言語を利用するためのコンソールを実装するために、以下のようなクラスを定義します。

  1. ConsoleHostを継承したクラスの実装。
  2. Initializeメソッドで、独自言語のLanguageContextの登録を行う。
    インスタンスを取得する方法と拡張子などを登録する方法があります。

基本的にこれだけで作れることになります。もちろん実用的な言語を作成しようとすれば、振る舞いや規則を含めて、色々な作業を行う必要がありますが、基本的には自分でCILを作成しなくても良いという点にメリットがあります。つまり言語実装者は、C#などの言語のみを知っていれば良く、独自の振る舞い用にもヘルパーメソッドなどを記述することで対応ができるのです。ですから、コンソールなどに凝らなければ、言語実装のみに集中できる可能性を持っているのがDLRというフレームワークだと言うことができるでしょう。