kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

【月1言語企画】文法がVBぽいだけのプログラミング言語VBLを作ってみた

3〜5月にかけて、月1プログラミング言語企画が続いていない、これは良くない!ということで、急遽お茶を濁すために作った言語です。基本的に、Klassicをベースに構文だけVBぽくした言語です。リポジトリは以下です。

github.com

次のような構文が使えます。

変数宣言

次のようにして書けます。

Dim x = 1 // x As Integerと同じ

型を書いてもいいです。

Dim x As Integer = 1

While式

元の言語が言語だけに、Whileも文ではなく式です。

Dim i = 0
Dim result = While i < 10
  PrintLine(i)
  i = i + 1
End While
PrintLine(result) 

ちゃんと、End Whileで閉じるところなどはVBを踏襲しています。

If式

やっぱりIfも文ではなく式です。

Dim i = If x < 10 Then
  1
Else
  2
End If

ちなみに、現状は都合により、Elseは省略できません。

Foreach式

VBぽいForを実装するのも難しくないのですが、パーザ以外にも手を入れなければならずめんどくさいので、代わりにForeach式があります。

Foreach i in [1, 2, 3, 4, 5]
  PrintLine(i)
End Foreach

関数定義

関数定義は Function ではじまり、 End Function で終わります。

Function Add(x, y)
  x + y
End Function

変数宣言と同様に型を書いても良いです(同じ意味です)

Function Add(x As Integer, y Integer) As Integer
  x + y
End Function
PrintLine(Add(1, 2))

サブルーチン定義

サブルーチン定義は Sub で始まり、 End Sub で終わります。

Sub Put(x)
  PrintLine(x)
End Sub
Put(1)

同じく、型を書いてもいいです。

Sub Put(x As Integer)
  PrintLine(x)
End Sub
Put(1)

その他にも、なんとなくVBぽい構文をいくつか実装していますが、とりあえず今日はこんなところで。

ちなみに、こういうEnd FunctionとかEnd Whileとか、対応するキーワードが指定されているタイプのやつは、文法の衝突をあんまり考えなくていいので、パーザ書くときにやはり楽ですね。