blog.livewing.net
C++
2016/06/26
C++で構文解析 Boost.Spirit.Qi #3
今回はQiの使いやすさを向上するものを紹介します。 構造体をtupleとして扱えるようにする パーサに>>演算子を適用すると、属性がtuple<A, B>になることは前回説明しました。でもtupleだと後々ゴチャゴチャしすぎるので、 struct Result { A a; B b; }; みたいなのに突っ込めたらとても分かりやすくなってGoodです。Boost.Fusionを使...
2016/06/16
C++で構文解析 Boost.Spirit.Qi #2
今回から、詳しい文法の定義方法を紹介します。 EBNF記法 コンピュータ言語の定義に使われるBNF(Backus-Naur form)を拡張したEBNF(Extended BNF)に近い書き方で文法を定義できるのがQiの特徴です。 例えば、EBNFで自然数(先頭が'0'でない1以上の数字列)を定義すると、 digit excluding zero ::= "1" | "2" | "3" | "4"...
2016/06/16
C++で構文解析 Boost.Spirit.Qi #1
Boost.Spirit.Qi(以下Qi)はC++用の構文解析ライブラリです。テンプレートや演算子オーバーロードを最大限に駆使しており、C++内で文法定義を完結させることができます。その分コンパイルがとても遅いです。 準備 QiはBoostの中に含まれています。Qiはビルド不要なライブラリなのでVisual Studioを使用している場合はNuGet経由でインストールすることができます。 ヘッダフ...