タイトル以上のことはほとんど書くことがないのですが、HOPEG、最初のリリースです。 詳しくは以下。
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の表現する言語は真に文脈自由言語を含んでいそうなのですが。