VB.NETでもパーサコンビネータを実装したい(その2)

はじめに

Spracheの一部を移植する形でパーサコンビネータを実装したと言うかしているのでそれについてです。

github.com

前回のはほとんどおもちゃですが、今回は違います。

燻製ニシンの虚偽

例によってあまり真っ当な動機でないのですが、以下の要件を満たすように実装しています。

で、使い方はとっても簡単。ParserCombinator.vbをコピーして適当な所に張り付けてあとは適当にビャーって書けば弊社的にはOKです。

Imports RedHerrings

Module Module1

    Public Property Num As Parser(Of Integer) =
        Parse.Regex("[0-9]+").Select(Function(it) Integer.Parse(it))

    Public Property AddExpr As Parser(Of Integer) =
        From a In Num
        From add In Parse.PString("+")
        From b In Num
        Select a + b

    Sub Main()
        Console.WriteLine(AddExpr.Parse("1+2"))
    End Sub

End Module

おわりに

ソースコードをそのまま放り込むタイプなので、足りない機能があればその場で追加できるというメガシンカにも匹敵するすごい事が出来るので、出来れば皆さんには真っ当なパーサコンビネータライブラリを使用していただけたらと思います。

ふざけたお話はここまでで、確かに弊社の必要に迫られて実装した面もありますが*1、何かとdisられがちなVBでなんらかの実績を作りたかったというのがあります。 (将来は分かりませんが)現状はVBC#の言語仕様を遅れてはいますが追従してますし、VBでもこのようなライブラリを書けるというのを示したかったという感じです。

おわり

*1:だからあんなニッチな要件を設定している