kmizuの日記

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

HOPEG 0.0.1リリースしました。

タイトル以上のことはほとんど書くことがないのですが、HOPEG、最初のリリースです。 詳しくは以下。

github.com

hopeg 0.0.1をlibraryDependencyに追加して、利用コードの中で

import com.github.kmizu.hopeg._
val grammar = HOPEGParser.parse(
  """
        |S = P("") !.; P(r) = "a" P("a" r) / "b" P("b" r) / r;
  """.stripMargin
)
val evaluator = HOPEGEvaluator(grammar)
evaluate.evaluate("abba", 'S) // "abba"は入力文字列 'Sは開始記号

のようにして使えます。マッチしたら、

Some[String]

マッチしなかったら

None

が返ってくる簡単なインタフェースです。今後は、

  • 型チェッカの実装
  • パーザの改善(パーズエラー時のメッセージの改善)

辺りやっていこうかと思います。それにしても、HOPEGの表現力、どうなってるんでしょうね?チューリング完全になってはいけないし、そうなってはいないと思うのですが…。First Order PEGの表現する言語は真に文脈自由言語を含んでいそうなのですが。