読者です 読者をやめる 読者になる 読者になる

【D言語】パーサジェネレータライブラリ:ctpg v1.0.0 リリース!

D言語erの皆さん、こんにちは。

タイトルにもある通り、ctpgのv1.0.0をリリースしました。 https://github.com/youkei/ctpg

ctpgって?


ctpgは、パーサジェネレータライブラリです。 と言っても、ANTLRYaccのようなものではなく、 Scalaのパーサコンビネータの様なパーサジェネレータです。 字句解析と構文解析は分かれていませんが、意図的に分けることも出来ます。 パーサはコンパイル時に生成され、それらはコンパイル時にも動作します。

どうやって導入するの?



git clone https://github.com/youkei/ctpg.git

のようにgit cloneして、src/ctpg.dを自分のプロジェクトの適当な場所に置きます。 コンパイルする際、ctpg.dを置いたディレクトリをインポートディレクトリに追加し、 ctpg.dを一緒にコンパイルします。 ctpg.dをimportディレクトリに置いたとすると、


dmd -Iimport import/ctpg.d hoge.d

となります。

どうやって使うの?


ctpgをインポートして適当に使います。


import ctpg;

// パーサを生成
mixin(generateParsers(q{
    string hoge = "hoge";
    string atoz = [a-z];
    string hoge_or_atoz = hoge / atoz;
}));

void main(){
    auto result1 = parse!hoge("hoge");
    assert(result1.match);
    assert(result1.value == "hoge");

    auto result2 = parse!atoz("hoge");
    assert(result2.match);
    assert(result2.value == "h");

    auto result3 = parse!hoge_or_atoz("hoge");
    assert(result3.match);
    assert(result3.value == "hoge");

    auto result4 = parse!hoge_or_atoz("piyo");
    assert(result4.match);
    assert(result4.value == "p");
}

ドキュメントはどこにあるの?


https://github.com/youkei/ctpg/wiki にあります。 ただ、ものすごく途中です。 すぐに書き終えますので、少しお待ちください。

まとめ


ctpg v1.0.0をリリースしたよという話でした。 ドキュメントも書いていない状況なので、気が引けましたが、 とりあえずリリースしました。 みなさんも、構文解析をする機会があればぜひ使ってみてください。

担当:美馬(D言語よりドキュメントのほうが遥かに書きづらい・・・)