【D言語】パーサジェネレータライブラリ:ctpg v1.0.0 リリース!
D言語erの皆さん、こんにちは。
タイトルにもある通り、ctpgのv1.0.0をリリースしました。 https://github.com/youkei/ctpg
ctpgって?
ctpgは、パーサジェネレータライブラリです。 と言っても、ANTLRやYaccのようなものではなく、 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言語よりドキュメントのほうが遥かに書きづらい・・・)