2012年09月09日

N6XBasicChecker(4)boost::spirit::qi::ruleの基礎

今回はboost::spiritを使った構文解析ツールの構成について書きたいと思います。

最初にお断りしておくと、このブログの情報だけからspiritを理解するのは無理です。
spiritに触れている日本語のブログエントリもすでに複数ありますが、やはりブログの情報だけで全容を理解できるものではありません。
英語ですが、結局boost本家のドキュメントが一番丁寧に説明されており、これを頭から「飛ばさずに」読むのが一番の近道です。
構文解析自体の知識も前提として要求されますので、予備知識がない人はコンパイラ理論の本を1冊読んだほうが良いでしょう。
私はとりあえず以下の本を読みました。
コンパイラ入門―構文解析の原理とlex/yacc、C言語による実装 (Computer Science Library) [単行本] / 山下 義行 (著); サイエンス社 (刊)

なので、本ブログでもspiritそのものの解説はオフィシャルに譲り、実際にプログラムを書く際にハマりそうなポイントを解説していきたいと思います。
続きを読む
posted by eighttails at 23:32| Comment(0) | N6XBasicChecker | このブログの読者になる | 更新情報をチェックする

2012年09月02日

N6XBasicChecker(3)boost::spirit事始め

なんか夏休み中にいろんなイベントが重なったので、色々脱線してしまいましたが、N6XBasicCheckerの内部の解説を再開したいと思います。

spiritはboostと呼ばれるC++ライブラリ群の1つで、パーサージェネレータとして機能します。
特徴としては
・テンプレートクラスとして実装され、ヘッダーをインクルードするだけで利用できる。
 spirit自体をビルドしてアプリからリンクする必要がないので、特にWindowsではちょっとだけ楽です。
・結構速い
 ベーマガ掲載のBASICリスト100本を2〜3秒でパースします。

ところで、こことかこことかこことかこことかこことかを見ていただけると解ると思いますが、日本語でboost::spiritを形容するのに最も使われている単語は「変態」です。
続きを読む
posted by eighttails at 11:21| Comment(0) | N6XBasicChecker | このブログの読者になる | 更新情報をチェックする

2012年08月14日

N6XBasicChecker(2)構文解析器事始め

N6XBasicCheckerも、まだまだやり残していることが多いとはいえ、とりあえず機能するようになったので、ここらで一度、内部の技術的な解説をしておきたいと思います。
N6XBasicCheckerは、構文解析器と呼ばれるジャンルのソフトウェアです。
テキストファイルを先頭から読み込み、BASIC言語の構文規則に合致しているかチェックします。
この構文解析器のプログラムは手作業で記述することも原理上可能ですし、実際にN6XBasicCheckerと同等の構文解析器を手作業で記述したプログラムも存在します。
P6つくろうブログ 簡易BASICチェックツール
が、構文解析中の条件分岐の組み合わせが膨大な数になるため、通常はパーサージェネレーターというツールを使用します。
続きを読む
posted by eighttails at 01:18| Comment(0) | N6XBasicChecker | このブログの読者になる | 更新情報をチェックする