Rustで作るプログラミング言語処理系 導入編

Rustの練習がてら、授業で作ったプログラミング言語処理系のトレースをしようと思います。

授業ではScalaで実装したが、 Built in Rustっていうとすごそうに見えるのでRustで書いていきます。

今回対象とする言語は以下の機能を持ちます。文法はScalaに似せています。

  • 変数に値を代入
  • 変数から値を読み出す
  • 関数定義、関数適用
  • Int, Bool, List[Int]の型を持つ
  • List[Int]はheadに先頭の値を、tailに残りの要素のListを持つ
  • 四則演算、比較演算(==, <)、結合演算(::)
  • if else式
  • 再帰関数

コード例(挿入ソート)

def insert(x: Int, l: List[Int]): List[Int] =
  if (l.isEmpty)
    x::Nil
  else if (x<l.head)
    x::l
  else
    l.head::insert(x, l.tail)

def sort(l: List[Int]): List[Int] =
  if (l.isEmpty)
    Nil
  else
    insert(l.head, sort(l.tail))

def test(n: Int): List[Int] =
  if (n == 0)
    Nil
  else
    insert(n, test(n-1))

授業ではnonscalaと呼んでいましたが、一般にそう呼ばれているかは知りません。

次回から実装に入ります。まずは字句解析から、どうかよろしくお願いします。